2013-03-04 120 views
1

在我的存储过程我有一个起始日期和结束日期字段是VARCHAR(10)如何添加日期时间字段,以+1天

@StartDate Varchar(10), 
@EndDate Varchar(10) 

我从开始日期03/01的UI给人一种输入/ 2013年和2013年3月4日

对于结束日期,我需要增加一个日+就是如果我的结束日期是2013年3月4日我需要更新到2013年3月5日..

谢谢

+0

检查您的问题。更新之后,你也提到了相同的结果。你的意思是03/05/2013? – 2013-03-04 17:55:42

+2

你有没有用** DATEADD **和** CONVERT **一起看过? – 2013-03-04 17:56:19

+3

是否有一个原因,你没有使用日期数据类型呢?然后你可以简单地使用dateadd()函数来添加一天。 – steoleary 2013-03-04 17:56:58

回答

3

SET @EndDate = DATEADD (d, 1, CAST(@StartDate AS datetime)) g给你答案为datetime。然后,您可以转换回,如果你需要一个varchar:

SET @EndDate = CAST(DATEADD (d, 1, CAST(@StartDate AS datetime)) AS varchar(10))

+0

这是给我一个错误,当我试图做同样的事情.. varchar类型的日期时间日期时间数据类型的转换导致超出范围值。 – user937194 2013-03-04 18:06:09

+0

谢谢我明白了.. – user937194 2013-03-04 18:08:03

5

如果这是一个新的存储过程(或不使用任何其他代码),最好的办法是改变你的变量Date类型。因为if you comparing data by date你应该比较Dates not varchar values

如果你CAN改变变量类型,那么你可以使用DATEADD()函数添加一天,如下所示。

--if @enddate is a date type 
select @enddate = dateadd(day,1,@enddate) 

如果CANNOT改变变量类型,你最好把它们放入ISO format(即; yyyymmdd),因为当前的字符串格式是特定文化和查询可以在一个服务器失败,不同的文化。

--date pass as yyyymmdd (not culture specific) 
select @enddate = convert(varchar(10), 
         dateadd(day, 1, convert(date, @enddate)), 101) 

--date pass as mm/dd/yyyy (US culture) 
select @enddate = convert(varchar(10), 
         dateadd(day, 1, convert(date, @enddate,101)), 101) 
+0

+1转化为美国英语 – 2013-03-04 19:52:42