在SELECT查询中组合SQL Server中的日期和时间

时间:2013-07-18 13:14:30

标签: sql sql-server-2008

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

我正在尝试这样

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

但这会导致错误:

  

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

3 个答案:

答案 0 :(得分:6)

使用DATEADD

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

有关DATEADD及其选项

的详细信息,请参阅freely available, comprehensive SQL Server Books Online documentation

答案 1 :(得分: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。

答案 2 :(得分: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;

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