使用DATEPART函数从datetime列中提取小时值

时间:2012-03-14 19:16:31

标签: sql ms-access

我正在尝试从包含格式化为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;

3 个答案:

答案 0 :(得分:2)

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吗?

答案 1 :(得分:0)

您可以使用HOUR功能代替DATEPART。它提供小时数而不管AM / PM

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

答案 2 :(得分:0)

您可以通过几种方式从查询表达式中的MS Access Date值中仅 仅提取小时数

以下是一些方法:

DatePart("h", [yourFieldName])  'returns a variant (Integer)

Format([yourFieldName],"h")     'returns a variant (String)

Hour([yourFieldName])           'returns a variant (Integer)

在Access中,我更喜欢最后一种方法,因为它简短明了。


基于该问题,我怀疑您正在查看SQL Server DATEPART function的文档,该文档存在一些细微的差异。

不要误以为SQL都是一样的。有 个相似之处,但语法并不总是可以互换的,尤其是在谈论MS Access时。在搜索有关Access的答案时,我总是在我的Google搜索查询中加入 mc access 甚至仍然,当您找到可能的答案时,请确认您正在查看的页面实际上是为Access编写的。


您的NULL问题

有些事情您没有要求寻求帮助,但是您需要帮助了! :)确实这是一个旧帖子,所以您必须已经弄清楚了自己的错误,或者您仍然陷在错误中,或者公司一直在错误地发布错误或错误消息。过去6年的报告。

  • [myFieldName] Is Not Null[myFieldName] <> Null 不同

简短的解释是 Null不是值。 Null可以解决周围的问题。它不是不是零,不是不是一个空''的字符串,也不是ZLS(零长度字符串)。

您使用<> NULL标准的方式可能是因为语法不正确,查询未返回没有记录


示例:

例如:您认为这个简单的方程会产生什么结果?

(Null+2)*3

...如果您说6

结果是:NULL。基本上,任何碰到NULL的事物都会变成NULL

再举一个例子。 在VBA中运行此

 If Null = Null Then MsgBox "Null equals Null." Else MsgBox "Null does NOT equal Null."

...您可能 得到您期望的答案!

出于准确性的考虑,必须按预期方式使用所有运算符,包括将IsIs Not运算符与the NULL Statement一起使用。


更多信息:


  

准备意外数据:

     

这实际上仅是 barely ,但使我成为LMAO,因为我从不曾想过为此做准备,所以我认为应该分享:

     

img

     

...这反过来使我想起那个讨厌的小孩, Bobby Tables