2012-03-14 22 views
1

我試圖從包含時間格式爲DateTime的列中提取數字小時值。例如,這裏有從該列幾個記錄:使用DATEPART函數從datetime列中提取小時值

Time Aired 
4:20:00 PM 
12:51:00 PM 
3:17:00 PM 
3:24:00 PM 

從這個專欄中,我正在試圖提取4,12,3,3等。DATEPART功能似乎是一個很好的選擇。但是,當我嘗試使用如下所示的函數時,系統會提示輸入Hour的參數。這導致我相信我錯誤地實施了DATEPART。有人可以發現問題可能是什麼?問題可能是我的日期時間格式化列只包含時間值?

SELECT DATEPART(hour, [Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] <> null; 

回答

1

documentation這表明,間隔部分(hours)應該被包含在引號中,它應該是h,不hours;因此,試試這個:

SELECT DATEPART("h", [Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] is not null; 

我的其他問題會是這樣,你不應該寫WHERE [Time Aired] is not null

+0

謝謝。我不知道我是如何忽略文檔中的引號的。關於WHERE語句,兩個版本都有效。我不知道是否更好。 – hughesdan 2012-03-14 19:36:47

+0

是的,如果我使用<> null – hughesdan 2012-03-14 19:40:18

+0

,我會得到相同的查詢結果這已經過去了幾年,所以希望您現在使用「is not null」而不是「<> null」。參考:[如何獲得空可怕錯誤](https://www.simple-talk.com/sql/t-sql-programming/how-to-get-nulls-horribly-wrong-in-sql-server/) – RobertB 2016-06-21 21:49:05

-1

可以使用HOUR函數代替DATEPART.It給人小時數字,不論AM的/ PM

SELECT HOUR([Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] <> null; 
+0

謝謝。我不知道小時。我不確定是選擇你的答案還是@Icarus。兩者都完成了工作。我將留下這個問題,看看選票是否表明一種方法是否更好。 – hughesdan 2012-03-14 19:39:15

+0

DatePart(「h」,「2012年5月5日9:54」)返回21而不是9。 – JeffO 2012-03-15 00:14:16