我们有一个表格,其中有一个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,就像我找到的所有示例一样?
提前致谢
答案 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;