表tab日期             2007-02-27
2007-02-28
2007-02-29
2007-02-30
2007-02-31
2007-03-01
2007-03-02想得到加1天的日期
结果为:2007-02-28
2007-02-29
2007-02-30
2007-02-31
2007-03-01
2007-03-02
2007-03-03select Convert(varchar(10),dateadd(day,1,日期),120) as 日期 from tab where 日期>='2007-02-27' and 日期<='2007-03-02'
出现
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。这个语句该怎么写?谢谢!

解决方案 »

  1.   

    dateadd(day , 1 , col)
      

  2.   

    create table tb(日期 datetime)           
    insert into tb values('2007-02-27') 
    insert into tb values('2007-02-28') 
    insert into tb values('2007-03-01') 
    insert into tb values('2007-03-02')
    goselect dateadd(day , 1 , 日期) as 日期 from tb where 日期>='2007-02-27' and 日期 <='2007-03-02' 
    drop table  tb/*
    日期                                                     
    ------------------------------------------------------ 
    2007-02-28 00:00:00.000
    2007-03-01 00:00:00.000
    2007-03-02 00:00:00.000
    2007-03-03 00:00:00.000(所影响的行数为 4 行)
    */
      

  3.   

    记得培训ERP系统时,就是有人在2月输入30日开查。
    结果可想而知。
      

  4.   


    dateadd(d,1,日期字段)Select   dateadd(m,2,dateadd(d, -datepart(d,getdate()),getdate()))
    ------------------------
    2009-02-28 12:52:02.263Select dateadd(d,1, dateadd(m,2,dateadd(d, -datepart(d,getdate()),getdate())))
    ------------------------
    2009-03-01 12:52:02.263
      

  5.   


    select dateadd(dd,1,getdate())
      

  6.   

    楼主,时间逻辑是什么。2007年2月经然有31天?关注ing
      

  7.   


    if object_id('tb') is not null
       drop table tb
    go
    create table tb(dt datetime)
    go
    insert into tb (dt) values ('2007-02-27')
    insert into tb (dt) values ('2007-02-28')
    insert into tb (dt) values ('2007-02-28')
    insert into tb (dt) values ('2007-03-01')
    insert into tb (dt) values ('2007-03-02')
    go
    select dateadd(dd,1,dt) from tb
    select dt+1 from tb