Как отфильтровать определенный период времени в оракуле - PullRequest
0 голосов
/ 18 октября 2018

У меня есть столбец даты и времени (Login_time) в этом формате '5/23/2018 3:35:18 PM'.Я хочу отфильтровать строки с месяцем августа и периодом времени 6.30 to 7.30.Я могу фильтровать август месяц, используя Login_time >= to_date('08/1/2018','MM/DD/YYYY') and Login_time >= to_date('08/31/2018','MM/DD/YYYY'), но теперь я хочу строки только с 6:30 до 7:30.

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Я использовал другой подход к требованию "между 6:30 и 7:30".В этом ответе я вычитаю 30 минут, а затем проверяю, является ли значение часа 6 или 7. Я выбрал этот подход как вариант сравнения строк.Я не знаю, работает ли он лучше, но это альтернативный подход.Приведение к метке времени необходимо для извлечения значения часа.

 WHERE trunc(login_time) BETWEEN to_date('8/1/2018', 'mm/dd/yyyy') AND to_date('8/31/2018', 'mm/dd/yyyy')
   AND extract(hour FROM cast(login_time-(30/60/24) as timestamp)) IN (6,7)

Если вы всегда будете запрашивать весь месяц, это может быть сокращено до

 WHERE trunc(login_time, 'MONTH') = to_date('8/1/2018', 'mm/dd/yyyy')
   AND extract(hour FROM cast(login_time-(30/60/24) as timestamp)) IN (6,7)
0 голосов
/ 18 октября 2018

Будьте осторожны с диапазонами даты / времени.Обычно вы хотите включить время начала и исключить время окончания, например, все строки с 2018-08-01 до 2018-09-01, таким образом, включая весь последний день, независимо от того, насколько близко к полуночи.Вот весь запрос:

select *
from mytable
where login_time >= date '2018-08-01' 
  and login_time < date '2018-09-01' 
  and to_char(login_time, 'hh24:mi') >= '06:30'
  and to_char(login_time, 'hh24:mi') < '07:31';
0 голосов
/ 18 октября 2018

Вы просто включаете время:

Login_time >= to_date('08/01/2018 06:30:00','MM/DD/YYYY HH24:MI:SS') 
 and Login_time <= to_date('08/31/2018 07:30:59','MM/DD/YYYY HH24:MI:SS') 
  and to_char(login_time, 'hh24:mi:ss') >= '06:30:00'
  and to_char(login_time, 'hh24:mi:ss') <= '07:30:59'

или

EXTRACT(MONTH FROM CAST(Login_time AS TIMESTAMP)) = 8 
  and to_char(login_time, 'fmSSSSS') between 6*60*60 + 30*60 AND 7*60*60 + 30*60 
0 голосов
/ 18 октября 2018

Вы можете отформатировать часть времени столбца в строку, а затем сравнить ее лексикографически:

TO_CHAR(login_time, 'HH24:MI:SS') BETWEEN '06:30:00' AND '07:30:00' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...