一个表里面有一个日期字段(LGA_Date),网页有一个搜索条件(下6个月跟下12个月)。我想把这个表里面的日期字段的年份加1后,再跟搜索条件进行比较,不知道用SQL语句能写出来吗?比如今天是2008-08-28LGA_Date="2008-08-20"
LGA_Date的年份加1,变成"2009-08-20"当选择下6个月的时候,日期是:"2008-08-28"-"2009-02-28",这时候记录不出来。(因为两个日期都小于LGA_Date)
当选择下12个月的时候,日期是:"2008-08-28"-"2009-08-28",这时候记录出来。(因为后面日期大于LGA_Date)分不够可以再加

解决方案 »

  1.   

    DATEADD
    在向指定日期加上一段时间的基础上,返回新的 datetime 值。语法
    DATEADD ( datepart , number, date ) 参数
    datepart是规定应向日期的哪一部分返回新值的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。日期部分 缩写 
    Year yy, yyyy 
    quarter qq, q 
    Month mm, m 
    dayofyear dy, y 
    Day dd, d 
    Week wk, ww 
    Hour hh 
    minute mi, n 
    second ss, s 
    millisecond ms 
    number是用来增加 datepart 的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为 datepart 指定 day,为 number 指定 1.75,则 date 将增加 1。date是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。 如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。返回类型
    返回 datetime,但如果 date 参数是 smalldatetime,返回 smalldatetime。示例
    此示例打印出 pubs 数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上 21 天。USE pubs
    GO
    SELECT DATEADD(day, 21, pubdate) AS timeframe
    FROM titles
    GO下面是结果集:timeframe                   
    --------------------------- 
    Jul 3 1991 12:00AM          
    Jun 30 1991 12:00AM         
    Jul 21 1991 12:00AM         
    Jul 13 1991 12:00AM         
    Jun 30 1991 12:00AM         
    Jul 9 1991 12:00AM          
    Mar 14 1997  5:09PM         
    Jul 21 1991 12:00AM         
    Jul 3 1994 12:00AM          
    Mar 14 1997  5:09PM         
    Nov 11 1991 12:00AM         
    Jul 6 1991 12:00AM          
    Oct 26 1991 12:00AM         
    Jul 3 1991 12:00AM          
    Jul 3 1991 12:00AM          
    Nov 11 1991 12:00AM         
    Jul 3 1991 12:00AM          
    Jul 3 1991 12:00AM          (18 row(s) affected)
      

  2.   

    declare lga_date as datetime
    set LGA_Date = '2008-08-20' 
    LGA_Date的年份加1,变成"2009-08-20" set LGA_Date = dateadd(year,1,LGA_Date)
    当选择下6个月的时候,日期是:"2008-08-28"-"2009-02-28",这时候记录不出来。(因为两个日期都小于LGA_Date) 
    set LGA_Date = dateadd(month,6,LGA_Date)当选择下12个月的时候,日期是:"2008-08-28"-"2009-08-28",这时候记录出来。(因为后面日期大于LGA_Date) 
    set LGA_Date = dateadd(month,12,LGA_Date)
      

  3.   


    select * from tb
    where dateadd(yy,1,LGA_Date) between getdate() and dateadd(m,6,getdate())  --下6个月select * from tb
    where dateadd(yy,1,LGA_Date) between getdate() and dateadd(yy,1,getdate())  --下12个月
      

  4.   

    谢谢大家的回答,可是不是我想要的结果。我要的SQL语句正常查询应该是:select * form test where LGA_Date >='2008-08-28' and LGA_Date<='2009-02-28'LGA_Date年份加1后,不知道应该怎么写。
      

  5.   

    ...select * form test where dateadd(yy,1,LGA_Date) >='2008-08-28' and dateadd(yy,1,LGA_Date) <='2009-02-28'