Oracle:仅按小时比较日期

时间:2010-02-26 16:24:47

标签: sql oracle plsql oracle11g

我们有一个表格,其中有一个DATE列d。

我想获得d列大于/低于某个值的所有行,无论日期如何。

例如

|       d          |
-------------------
|2009/11/1 15:55:23|
--------------------
|2009/11/2 15:55:23|
--------------------
|2009/11/3 15:55:23|
--------------------
|2009/11/3 17:55:23|
--------------------

例如,如果我想要在下午5点之后标记所有记录:

select d 
 from my_table 
where extract( hour from d ) > TO_DATE ('17:00:00','HH24:MI:SS') 

这应该只返回一条记录

|2009/11/3 17:55:23|

我不知道这是否是最佳方式,但我在提取功能上出错:

ORA-30076: invalid extract field for extract source 
Cause: The extract source does not contain the specified extract field.

有更好的方法吗? 这个错误怎么了?提取仅适用于sysdate,就像我找到的所有示例一样?

提前致谢

3 个答案:

答案 0 :(得分:13)

这个怎么样?

select d 
from my_table
where to_char(d,'HH24') > '16';

答案 1 :(得分:8)

目前没有要测试的Oracle数据库,但我认为以下内容应该有效:

SELECT *
  FROM MY_TABLE t
  WHERE EXTRACT(HOUR FROM CAST(t.D AS TIMESTAMP)) > 16;

但是我不明白为什么需要CAST,因为this page说HOUR是DATE中的有效字段。

分享并享受。

答案 2 :(得分:5)

试试这个:

select d from my_table 
where (d-trunc(d)) > 16/24;