2012-03-14 77 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