【发布时间】:2017-03-02 22:00:21
【问题描述】:
我正在尝试将列的日期连接到一天中的固定时间,然后将 CAST 整个事情连接为 DATETIME。
固定时间是早上 5:30。
我正在使用的日期列需要调整,因为它显示了某事运行的结束日期/时间;我想使用 开始 日期/时间。
开始日期/时间时间不能作为其自己的列使用,但我有另一列包含该过程所用的持续时间(以秒为单位),因此我可以使用 DATEADD 将结束日期/时间回滚到开始日期/时间。
这是完整的声明:
CAST(CONVERT(VARCHAR(10), DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate]), 103) + ' ' + '05:30' as DATETIME)
这是我收到的错误消息:
导致将 varchar 数据类型转换为 datetime 数据类型 在一个超出范围的值。
我已尝试测试这些语句来调查问题,但它们都可以自行运行:
CAST(CONVERT(VARCHAR(10), GETDATE(), 103) + ' ' + '05:30' as DATETIME)
CAST('2017-03-02' + ' ' + '05:30' as DATETIME)
DATEADD(ss,-ConfTask.[LastExecutedDuration], ConfTask.[LastExecutedDate])
我对如何解决这个问题有点困惑。任何帮助将不胜感激。
【问题讨论】:
-
ConfTask.[LastExecutedDuration]是否存储为TIME、INT、NUMERIC()值...? -
存储为
Decimal(18, 0) -
这不可能与您正在转换为特定格式
(103)的事实有关,对吧?因为在您的示例中,您将GETDATE()转换为(103),而不是ConfTask.[LastExecutedDate])。您是否尝试过使用不同的日期格式(例如(101))运行它,或者根本不提供特定格式? (希望不是一个愚蠢的问题......) -
我认为您可能走在正确的轨道上,因为我尝试分别格式化日期和时间部分,这似乎有效(请参阅下面的答案)。不是 100% 确定它为什么会这样工作,但是你去吧!感谢您查看此内容。
标签: tsql sql-server-2012