2013-07-18 69 views
6

我有我的表From日期,但我想修復時間添加到它結合日期和時間在SQL Server中的SELECT查詢

我想這樣

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

,但是這是造成錯誤:

Operand data type date is invalid for add operator.

+0

是的,我使用的是sql server 2008 –

回答

6

使用DATEADD

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

freely available, comprehensive SQL Server Books Online documentation關於DATEADD更多的細節和它的選項

+1

「日期部分小時不支持日期函數dateadd數據類型日期。」 (或者從'DATEADD'的文檔:「返回數據類型是日期參數的數據類型,除了字符串文字」) –

+0

它給出了這個錯誤:日期部分小時不被date函數dateadd支持用於數據類型日期。 –

+1

@Damien_The_Unbeliever:arrrrgh!當然 - 如果是'DATE',那麼它不允許使用......所以你需要首先投射到'DATE'以獲得零時間,然後返回到'DATETIME',這樣你就可以增加小時。 .... 感謝您指出了這一點! –

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

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。

+0

+1超級智能 - 隨着時間的推移只是不太直觀和可維護:-)誰將在6,12個月後解決這個問題?最好在你的代碼中留下好評! :-) –

+1

@marc_s - 第一次,第二次或第三次遇到它時,可能不太直觀。但是由於這是我對日期/時間操縱的「前往」模式,任何與我一起工作過很長時間的人都會很快了解這種模式。 –