我正在尝试将列的日期连接到当天的固定时间,然后将整个事件CAST
连接为DATETIME
。
固定时间是早上5:30。
我正在使用的日期列需要进行调整,因为它显示了某些内容的结束日期/时间;我想使用开始日期/时间。
开始日期/时间不能作为自己的列,但是我有另一个列,其持续时间为几秒钟,因此我可以使用DATEADD
将结束日期/时间回滚到开始日期/时间。
以下是完整的陈述:
CAST(CONVERT(VARCHAR(10), DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate]), 103) + ' ' + '05:30' as DATETIME)
以下是我收到的错误消息:
导致将varchar数据类型转换为日期时间数据类型 在超出范围的价值。
我已经尝试过测试这些语句来调查这个问题,但它们都可以自行运行:
CAST(CONVERT(VARCHAR(10), GETDATE(), 103) + ' ' + '05:30' as DATETIME)
CAST('2017-03-02' + ' ' + '05:30' as DATETIME)
DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate])
我对如何解决这个问题有点困惑。任何帮助将不胜感激。
答案 0 :(得分:1)
显然,您必须在列中包含一些意外值。
我建议使用如下查询找到它们:
SELECT LastExecutedDuration, LastExecutedDate
FROM ConfTask
WHERE TRY_CONVERT(datetime,
CONVERT(VARCHAR(10),
DATEADD(second,
-ConfTask.[LastExecutedDuration],
ConfTask.[LastExecutedDate]
)
103
) + ' ' + '05:30')
)
您还可以通过使用日期函数来简化逻辑:
select dateadd(minute,
5 * 60 + 30,
convert(datetime,
convert(date,
dateadd(second,
- ConfTask.LastExecutedDuration
ConfTask.LastExecutedDate
)
)
)
)
答案 1 :(得分:0)
这有效:
CONVERT(DATETIME, CONVERT(CHAR(8), DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate]), 112)) + ' ' + CONVERT(CHAR(8), '05:30:00', 108)