Oracle: сравнивать даты только по часам

У нас есть таблица с столбцом 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|

Я не знаю, является ли это лучшим способом, но я получаю сообщение об ошибке в функции extract:

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

Есть ли лучший способ сделать это? Что с этой ошибкой? извлечение доступно только для sysdate, как и во всех найденных примерах?

Заранее спасибо

Ответ 1

Как насчет этого?

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

Ответ 2

У вас нет базы данных Oracle для тестирования в настоящий момент, но я думаю, что следующее должно работать:

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

Но я не понимаю, почему CAST понадобится, поскольку эта страница говорит, что HOUR является допустимым полем в DATE.

Поделитесь и наслаждайтесь.

Ответ 3

Попробуйте следующее:

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