CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

我想要显示。超过规定日期的记录。

楼主kanes(kanes)2005-06-06 23:10:52 在 MS-SQL Server / 基础类 提问

我有这么一个表(a),表中有这么几个字段  
  a1是记录当时写入记录的日期(datetime)       a2记录最长的有效天数(nvarchar)        
  现在要列出超过有效期的记录,就是a1当时时间+a2的天数。得到的时间要大于现在的时间的记录。  
   
  select     *     from   a   where   a1+a2>getdate()    
  上面的写法。我自己写的。可是出错了。  
   
  那位大哥,帮我来看看。 问题点数:20、回复次数:6Top

1 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-06 23:32:59 得分 1

select     *     from   a   where   convert(a1   as   int)+a2<convert(getdate()   as   int)  
  Top

2 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-06 23:46:51 得分 7

CAST   和   CONVERT  
  将某种数据类型的表达式显式转换为另一种数据类型。CAST   和   CONVERT   提供相似的功能。  
   
  语法  
  使用   CAST:  
   
  CAST   (   expression   AS   data_type   )    
   
  使用   CONVERT:  
   
  CONVERT   (   data_type   [   (   length   )   ]   ,   expression   [   ,   style   ]   )  
   
  参数  
  expression  
   
  是任何有效的   Microsoft&reg;   SQL   Server&#8482;   表达式。有关更多信息,请参见表达式。    
   
  data_type  
   
  目标系统所提供的数据类型,包括   bigint   和   sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。    
   
  length  
   
  nchar、nvarchar、char、varchar、binary   或   varbinary   数据类型的可选参数。    
   
  style  
   
  日期格式样式,借以将   datetime   或   smalldatetime   数据转换为字符数据(nchar、nvarchar、char、varchar、nchar   或   nvarchar   数据类型);或者字符串格式样式,借以将   float、real、money   或   smallmoney   数据转换为字符数据(nchar、nvarchar、char、varchar、nchar   或   nvarchar   数据类型)。  
   
  SQL   Server   支持使用科威特算法的阿拉伯样式中的数据格式。  
   
  在表中,左侧的两列表示将   datetime   或   smalldatetime   转换为字符数据的   style   值。给   style   值加   100,可获得包括世纪数位的四位年份   (yyyy)。  
   
  Top

3 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-06 23:47:10 得分 7

示例  
  A.   同时使用   CAST   和   CONVERT  
  每个示例都将检索书名(这些图书的截止当前销售额的第一位数字为   3),并将这些图书的   ytd_sales   转换为   char(20)。  
   
  --   Use   CAST.  
  USE   pubs  
  GO  
  SELECT   SUBSTRING(title,   1,   30)   AS   Title,   ytd_sales  
  FROM   titles  
  WHERE   CAST(ytd_sales   AS   char(20))   LIKE   '3%'  
  GO  
   
  --   Use   CONVERT.  
  USE   pubs  
  GO  
  SELECT   SUBSTRING(title,   1,   30)   AS   Title,   ytd_sales  
  FROM   titles  
  WHERE   CONVERT(char(20),   ytd_sales)   LIKE   '3%'  
  GO  
   
  下面是任一查询的结果集:  
   
  Title                                                     ytd_sales        
  ------------------------------   -----------    
  Cooking   with   Computers:   Surrep   3876                  
  Computer   Phobic   AND   Non-Phobic   375                    
  Emotional   Security:   A   New   Algo   3336                  
  Onions,   Leeks,   and   Garlic:   Coo   375                    
   
  (4   row(s)   affected)  
   
  B.   使用带有算术运算符的   CAST  
  下面的示例通过将总的截止当前销售额   (ytd_sales)   与每本图书的价格   (price)   相除,进行单独列计算   (Copies)。在四舍五入到最接近的整数后,此结果将转换为   int   数据类型。    
   
  USE   pubs  
  GO  
  SELECT   CAST(ROUND(ytd_sales/price,   0)   AS   int)   AS   'Copies'  
  FROM   titles  
  GO  
   
  下面是结果集:  
   
  Copies              
  ------    
  205                    
  324                    
  6262                  
  205                    
  102                    
  7440                  
  NULL                  
  383                    
  205                    
  NULL                  
  17                      
  187                    
  16                      
  204                    
  418                    
  18                      
  1263                  
  273                    
   
  (18   row(s)   affected)  
   
  C.   使用   CAST   进行串联    
  下面的示例使用   CAST   数据类型转换函数来串联非字符、非二进制表达式。  
   
  USE   pubs  
  GO  
  SELECT   'The   price   is   '   +   CAST(price   AS   varchar(12))  
  FROM   titles  
  WHERE   price   >   10.00  
  GO  
   
  下面是结果集:  
   
  ------------------    
  The   price   is   19.99                  
  The   price   is   11.95                  
  The   price   is   19.99                  
  The   price   is   19.99                  
  The   price   is   22.95                  
  The   price   is   20.00                  
  The   price   is   21.59                  
  The   price   is   10.95                  
  The   price   is   19.99                  
  The   price   is   20.95                  
  The   price   is   11.95                  
  The   price   is   14.99                  
   
  (12   row(s)   affected)  
   
  D.   使用   CAST   获得更多易读文本  
  下面的示例在选择列表中使用   CAST   将   title   列转换为   char(50)   列,这样结果将更加易读。  
   
  USE   pubs  
  GO  
  SELECT   CAST(title   AS   char(50)),   ytd_sales  
  FROM   titles  
  WHERE   type   =   'trad_cook'  
  GO  
   
  下面是结果集:  
   
                                                                                                                ytd_sales  
  --------------------------------------------------           ---------  
  Onions,   Leeks,   and   Garlic:   Cooking   Secrets   of   the             375  
  Fifty   Years   in   Buckingham   Palace   Kitchens                             15096  
  Sushi,   Anyone?                                                                                   4095  
   
  (3   row(s)   affected)  
   
  E.   使用带有   LIKE   子句的   CAST  
  下面的示例将   int   列(ytd_sales   列)转换为   char(20)   列,以便使用   LIKE   子句。  
   
  USE   pubs  
  GO  
  SELECT   title,   ytd_sales  
  FROM   titles  
  WHERE   CAST(ytd_sales   AS   char(20))   LIKE   '15%'  
        AND   type   =   'trad_cook'  
  GO  
   
  下面是结果集:  
   
  title                                                                                                                 ytd_sales        
  ------------------------------------------------------------   -----------    
  Fifty   Years   in   Buckingham   Palace   Kitchens                                         15096                
   
  (1   row(s)   affected)  
   
  Top

4 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-06 23:53:02 得分 4

我没理解错的话,应该是“得到的时间要小于现在的时间的记录”吧。  
  比如a1为“2005-04-30”,a2为30。那么"2005-04-30"   加上30得到的日期是"2005-05-30",小于当前日期,就是超出有效期了吧。  
   
  那么应该这么写  
  Select   *     from   TableName   Where   DateDiff(dd,DateAdd(dd,Cast   (a2   As   Int),a1),GetDate())>0  
  Top

5 楼paoluo(一天到晚游泳的鱼)回复于 2005-06-06 23:54:32 得分 1

一楼的语句语法根本就是错误的,Convert不是这么用的。Top

6 楼paoluo(一天到晚游泳的鱼)回复于 2005-07-29 17:17:12 得分 0

帮助,自己都可以在本机看啊。  
   
  真是晕倒。Top

相关问题

  • 菜%……菜%……菜%……菜%……菜%……quickrep中怎么计算每页中规定的记录显示记录的和?
  • 高分求助高手!!!!!!!!!quickrep中怎么计算每页中规定的列记录显示记录的和?
  • 在DataView.RowFilter属性中设置显示某一日期段的记录
  • 记录集导入Excel表格后,日期型字段显示的的却不是日期???????
  • MSFlexGrid记录显示
  • ===========日期记录查询============
  • 记录日期的比较
  • 日期显示
  • 用Recordset显示记录项
  • 显示记录问题?

关键词

  • sales
  • ytd
  • 记录
  • 日期
  • cast
  • cook
  • affected
  • 使用
  • 时间
  • go下面是结果集

得分解答快速导航

  • 帖主:kanes
  • duanduan1122
  • duanduan1122
  • duanduan1122
  • paoluo
  • paoluo

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo