Как удалить дату из отметки даты и времени в Oracle? - PullRequest
0 голосов
/ 27 февраля 2019

Очень быстрый вопрос, если у меня есть поле, например closed_date, которое имеет дату и время, т.е.

01-JAN-19 09.00.00.000000000

И я хотел бы только смотреть на случаи, закрытые с 09:00 до 10:00.каждый день, какой синтаксис?Как мне обрезать поле только по времени и получать только те случаи, которые закрывались каждый день с 9 до 10 утра?

1005 * Большое спасибо

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать функцию извлечения из oracle

SELECT EXTRACT(HOUR FROM timestamp_col_value) AS CURRENT_HOUR
FROM DUAL;

Обратите внимание, что функция извлечения работает только в определенных комбинациях типов MONTH / DAY / HOUR и даты. Подробнее см. Здесь.

Если вы хотите извлечь час из даты и времени, вам сначала нужно преобразовать его в метку времени, то есть

SELECT EXTRACT(HOUR FROM CAST(SYSDATE AS TIMESTAMP)) AS CURRENT_HOUR 
FROM DUAL;
0 голосов
/ 27 февраля 2019

Вы, похоже, ищете условие для фильтрации столбца метки времени на основе его части часа.Существуют различные способы извлечения частей даты из метки времени, вот решение, которое использует TO_CHAR:

TO_CHAR(closed_date, 'hh24') = '09'

Это будет соответствовать меткам времени, время которых больше или равно 9 часам утра и строго меньше, чем 10 часам утра..

0 голосов
/ 27 февраля 2019

Вы можете посмотреть только на часовую часть;поскольку у вас есть временная метка, вы можете извлечь номер часа:

where extract(hour from closed_date) = 9

, который найдет строки там, где время включено или после 09:00:00, и до (не включая) 10: 00: 00.


Обычно при просмотре данных за период времени, например, «между 9 и 10», вы на самом деле не хотите включать верхний предел, потому что если вы также просматривали данные«между 10 и 11», тогда данные в 10:00:00 будут включены в оба, что, вероятно, не то, что предполагалось.Поэтому для сравнений даты и времени характерно использование >= и < вместо between;Вы также можете сделать это с помощью сравнения строк, которое вы можете считать более понятным:

where to_char(closed_date, 'HH24:MI:SS') >= '09:00:00'
and to_char(closed_date, 'HH24:MI:SS') < '10:00:00'

или чуть проще

where to_char(closed_date, 'HH24') >= '09'
and to_char(closed_date, 'HH24') < '10'

, который в данном случае, поскольку это один час, являетсятак же, как:

where to_char(closed_date, 'HH24') = '09'

, но, так как вы все равно смотрите только на часовую часть, извлечение ее в виде числа упрощает ее еще больше (IMO).

0 голосов
/ 27 февраля 2019
select regexp_Replace('01-JAN-19 09.00.00.000000000','\d+-\w+-\d+ ') from dual

Но если вы хотите искать между часами, попробуйте EXTRACT, например:

SELECT *
FROM   your_table
WHERE  to_char(your_column,
               'yyyy-mm-dd hh24:mi:ss.ff a.m.',
               'nls_date_language=american') in (9,10)

Обновленный ответ.без параметра nls_Date_language часы 9 часов также могут быть 9.pm, то есть 21.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...