在我的存储过程我有一个起始日期和结束日期字段是VARCHAR(10)如何添加日期时间字段,以+1天
@StartDate Varchar(10),
@EndDate Varchar(10)
我从开始日期03/01的UI给人一种输入/ 2013年和2013年3月4日
对于结束日期,我需要增加一个日+就是如果我的结束日期是2013年3月4日我需要更新到2013年3月5日..
谢谢
在我的存储过程我有一个起始日期和结束日期字段是VARCHAR(10)如何添加日期时间字段,以+1天
@StartDate Varchar(10),
@EndDate Varchar(10)
我从开始日期03/01的UI给人一种输入/ 2013年和2013年3月4日
对于结束日期,我需要增加一个日+就是如果我的结束日期是2013年3月4日我需要更新到2013年3月5日..
谢谢
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))
这是给我一个错误,当我试图做同样的事情.. varchar类型的日期时间日期时间数据类型的转换导致超出范围值。 – user937194 2013-03-04 18:06:09
谢谢我明白了.. – user937194 2013-03-04 18:08:03
如果这是一个新的存储过程(或不使用任何其他代码),最好的办法是改变你的变量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)
+1转化为美国英语 – 2013-03-04 19:52:42
检查您的问题。更新之后,你也提到了相同的结果。你的意思是03/05/2013? – 2013-03-04 17:55:42
你有没有用** DATEADD **和** CONVERT **一起看过? – 2013-03-04 17:56:19
是否有一个原因,你没有使用日期数据类型呢?然后你可以简单地使用dateadd()函数来添加一天。 – steoleary 2013-03-04 17:56:58