Oracle: сравнивать даты только по часам - PullRequest
12 голосов
/ 26 февраля 2010

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

Например, если я хочу, чтобы все записи отмечались после 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, как во всех примерах, которые я нашел?

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

Ответы [ 3 ]

13 голосов
/ 26 февраля 2010

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

select d 
from my_table
where to_char(d,'HH24') > '16';
8 голосов
/ 28 февраля 2010

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

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

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

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

5 голосов
/ 26 февраля 2010

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

select d from my_table 
where (d-trunc(d)) > 16/24; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...