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

У нас есть таблица, которая имеет столбец d DATE.

Я хотел бы получить все строки, где 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|
--------------------

Например, Если я хочу все записи, отмеченные после 17:00:

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, как во всех примерах я нашел?

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

13
задан Jeffrey Kemp 2 March 2010 в 06:13
поделиться

3 ответа

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

select d 
from my_table
where to_char(d,'HH24') > '16';
14
ответ дан 1 December 2019 в 21:11
поделиться

Попробуйте это:

select d from my_table 
where (d-trunc(d)) > 16/24; 
5
ответ дан 1 December 2019 в 21:11
поделиться

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

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

Но я не понимаю, зачем нужен CAST, поскольку эта страница говорит, что ЧАС - допустимое поле для ДАТЫ.

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

8
ответ дан 1 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: