我有我的表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.
我有我的表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.
使用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
更多的細節和它的選項
「日期部分小時不支持日期函數dateadd數據類型日期。」 (或者從'DATEADD'的文檔:「返回數據類型是日期參數的數據類型,除了字符串文字」) –
它給出了這個錯誤:日期部分小時不被date函數dateadd支持用於數據類型日期。 –
@Damien_The_Unbeliever:arrrrgh!當然 - 如果是'DATE',那麼它不允許使用......所以你需要首先投射到'DATE'以獲得零時間,然後返回到'DATETIME',這樣你就可以增加小時。 .... 感謝您指出了這一點! –
我只想用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
。
正如不同的看法上的事,我會再次輪出我最喜愛的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。
+1超級智能 - 隨着時間的推移只是不太直觀和可維護:-)誰將在6,12個月後解決這個問題?最好在你的代碼中留下好評! :-) –
@marc_s - 第一次,第二次或第三次遇到它時,可能不太直觀。但是由於這是我對日期/時間操縱的「前往」模式,任何與我一起工作過很長時間的人都會很快了解這種模式。 –
是的,我使用的是sql server 2008 –