У нас есть таблица, которая имеет столбец 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, как во всех примерах я нашел?
Заранее спасибо
Как насчет этого?
select d
from my_table
where to_char(d,'HH24') > '16';
Попробуйте это:
select d from my_table
where (d-trunc(d)) > 16/24;
На данный момент у меня нет базы данных Oracle для тестирования, но я думаю, что следующее должно работать:
SELECT *
FROM MY_TABLE t
WHERE EXTRACT(HOUR FROM CAST(t.D AS TIMESTAMP)) > 16;
Но я не понимаю, зачем нужен CAST, поскольку эта страница говорит, что ЧАС - допустимое поле для ДАТЫ.
Делитесь и наслаждайтесь.