SQL手动附加时间

时间:2014-04-16 13:49:46

标签: sql tsql datetime time sql-server-2008-r2

我有一个表来处理我在其他表中使用的加载时间。最近我们开始处理不同的时区,现在我们正在研究日期时间偏移,我们想要手动设置一个格式为smalldatetime的SQL列的时间部分。我尝试了以下各种变体:

DECLARE @AZTime smalldatetime
SET @AZTime = '2014-04-16 07:00:00.000'

UPDATE DATE_CONTROL
SET StartRangeDate = convert(varchar(8),getdate()-1,20) + CONVERT(CHAR(5), @AZTime, 8),
EndRangeDate = convert(varchar(8),getdate(),20) + CONVERT(CHAR(5), @AZTime, 8)

WHERE Description ='Date Load'

但我收到错误:

Msg 295, Level 16, State 3, Line 4
Conversion failed when converting character string to smalldatetime data type.

对于我尝试这样做的大多数方法。我相信smalldatetime可以处理数据,因为我已经使用dateadd函数来改变之前的小时,但是我需要手动设置小时而不是现在使用dateadd。我在SQL Server 2008R2上这样做。

更新

将varchar更改为11我​​得到了正确的格式:

DECLARE @AZTime smalldatetime
SET @AZTime = '2014-04-16 07:00:00.000'

Select StartRangeDate = Convert(varchar(11),getdate()-1,20) + CONVERT(CHAR(5), @AZTime, 8),
EndRangeDate = convert(varchar(11),getdate(),20) + CONVERT(CHAR(5), @AZTime, 8)

结果:

StartRangeDate          EndRangeDate
2014-04-15 07:00    2014-04-16 07:00

1 个答案:

答案 0 :(得分:0)

在没有通过select进行测试的情况下,set语句中使用了不正确的varchar计数。

DECLARE @AZTime smalldatetime
SET @AZTime = '2014-04-16 07:00:00.000'

UPDATE DATE_CONTROL
SET StartRangeDate = convert(varchar(11),getdate()-1,20) + CONVERT(CHAR(5), @AZTime, 8),
EndRangeDate = convert(varchar(11),getdate(),20) + CONVERT(CHAR(5), @AZTime, 8)

WHERE Description ='Date Load'