13

我们有一个包含 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,就像我发现的所有示例一样?

提前致谢

4

3 回答 3

15

这个怎么样?

select d 
from my_table
where to_char(d,'HH24') > '16';
于 2010-02-26T16:31:52.430 回答
9

目前没有要测试的 Oracle 数据库,但我认为以下方法应该可行:

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

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

分享和享受。

于 2010-02-28T14:20:58.420 回答
5

试试这个:

select d from my_table 
where (d-trunc(d)) > 16/24; 
于 2010-02-26T16:30:07.327 回答