CAST (CURRENT_TIMESTAMP AS TIME) - PullRequest
       3

CAST (CURRENT_TIMESTAMP AS TIME)

0 голосов
/ 25 января 2019

Я пытаюсь работать с метками времени и манипулировать данными из них, чтобы я мог измерять разные вещи в нашей базе данных.

В настоящее время у меня есть столбец, который содержит «ДАТА», но на самом деле содержит целоештамп «ДД / ММ / ГГГГ ЧЧ24: MI: SS»

Я хочу иметь возможность получить все записи, где «DTIME» между «09:00» и «09:15», однако, не удалосьприведите его правильно.

Если бы я должен был вывести столбец без какого-либо преобразования, он выглядел бы так:

  SELECT ia.DTIME3
  FROM ISIS_AUDIT ia
  WHERE ia.DTIME3 like to_date('24/01/2019', 'DD/MM/YYYY');

ВЫХОД: 24 / ЯНВ / 19

, если бы я былчтобы преобразовать его в __char,

  SELECT to_char(ia.DTIME3, 'DD/MM/YYYY HH24:MI:SS')
  FROM ISIS_AUDIT ia
  WHERE ia.DTIME3 like to_date('24/01/2019', 'DD/MM/YYYY');

ВЫХОД: 24/01/2019 07: 10: 52

Я хочу иметь возможность использовать этот DTIME3 и находить записи между временами, кроме CAST иCONVERT to TIME не работает.

Это мой рабочий вариант, но он по-прежнему выводит дату, и мне не нужно указывать дату, чтобы ее можно было запускать в любой день недели.

  WHERE ia.DTIME3 between to_date('24/01/2019 09:00:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('24/01/2019 09:15:00', 'DD/MM/YYYY HH24:MI:SS');

ВЫХОД: 24/01/2019 09: 00: 01

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Oracle имеет DATE и TIMESTAMP типы данных;оба имеют год, месяц, день, час, минуту и ​​секунды (TIMESTAMP также имеет доли секунды).В Oracle нет типа данных TIME.

Вместо этого используйте TRUNC(), чтобы усечь компонент времени до полуночи и добавить литерал интервала:

SELECT *
FROM   ISIS_AUDIT
WHERE  DTIME BETWEEN TRUNC( DTIME ) + INTERVAL '09:00' HOUR TO MINUTE
             AND     TRUNC( DTIME ) + INTERVAL '09:15' HOUR TO MINUTE;
0 голосов
/ 25 января 2019
and ia.DTIME1 not between to_date('&&S_DATE 08:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 09:20:00', 'DD/MM/YYYY HH24:MI:SS')               
                and ia.DTIME1 not between to_date('&&S_DATE 11:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 12:40:00', 'DD/MM/YYYY HH24:MI:SS') 
                and ia.DTIME3 not between to_date('&&S_DATE 08:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 09:20:00', 'DD/MM/YYYY HH24:MI:SS')               
                and ia.DTIME3 not between to_date('&&S_DATE 11:50:00', 'DD/MM/YYYY HH24:MI:SS') and to_date('&&S_DATE 12:40:00', 'DD/MM/YYYY HH24:MI:SS')

Я пытался сделать это таким образом, однако заметил, что если у меня есть время начала 08:30 и время окончания 09:30, тогда оно падает между 09:00 и 09:15, поэтому я хочу исключить его из Таблица. текущее предложение WHERE, которое я использую, является довольно конкретным и будет исключено, только если отметка времени содержит указанные значения.

Действительно, было бы желательно прочитать «DTIME1 - DTIME3 не между 09:00 и 09:15»

0 голосов
/ 25 января 2019

В настоящее время у меня есть столбец, который содержит «ДАТУ», но на самом деле содержит целую отметку «ДД / ММ / ГГГГ ЧЧ24: MI: SS»

Вот что делает Oracle DATE тип данных : сохранение даты и времени (без дробных секунд, которые принадлежат типам данных TIMESTAMP). В Oracle нет определенного формата только для даты (без времени).

Для фильтрации по времени дня вы можете использовать функцию TO_CHAR() , чтобы преобразовать вашу дату в строку, которая представляет ее время, и которую вы можете сравнить:

TO_CHAR(ia.DTIME3, 'hh24:mi') BETWEEN '09:00' AND '09:14'

Вы также можете CAST указать дату и использовать функцию EXTRACT() :

EXTRACT(HOUR FROM CAST(ia.DTIME3 AS TIMESTAMP)) = 9 
AND EXTRACT(MINUTE FROM CAST(ia.DTIME3 AS TIMESTAMP)) < 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...