6

我的表中有From 日期,但我想为其添加修复时间

我正在尝试这样

select cast(FromDate as date) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason

但这会导致错误:

操作数数据类型日期对于加法运算符无效。

4

3 回答 3

6

使用DATEADD

SELECT
   DATEADD(HOUR, 18, CAST(CAST(FromDate AS DATE) AS DATETIME)) as StartDT 
FROM
   WsWmpLeaveReason

有关更多详细信息及其选项,请参阅免费提供的综合 SQL Server 联机丛书文档DATEADD

于 2013-07-18T13:17:36.880 回答
3

就像对事物的不同看法一样,我将再次推出我最喜欢的DATEADD/技巧:DATEDIFF

select DATEADD(day,DATEDIFF(day,'20010101',FromDate),'2001-01-01T18:00:00')
from WsWmpLeaveReason

这通过计算从 2001 年 1 月 1 日到FromDate的(整数)天数,然后将相同的(整数)天数添加到 2001 年 1 月 1 日的 18:00 来工作。通过扣除,这必须产生一个具有相同的日期日期为FromDate,但时间部分固定为 18:00。

于 2013-07-18T13:24:16.410 回答
1

我只会使用datetime和添加:

select cast(cast(FromDate as date) as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason;

如果FromDate已经缺少时间组件,您可以这样做:

select cast(FromDate as datetime) + cast('18:00:00' as time(3)) as StartDT 
from WsWmpLeaveReason;

您可以将 a 添加time到 a datetime,但不能添加到 a date

于 2013-07-18T13:24:04.673 回答