SQL-запрос SELECT временных интервалов - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь ВЫБРАТЬ все строки из базы данных SQL с интервалом в один час для каждого дня. Столбец datetime называется «Dt» и имеет следующий формат datetime: 2019-10-17 16: 03: 43

Я хотел бы извлечь все строки из этой таблицы, где Dt был между 22:00:00 и 02:00:00, на каждый день.

SELECT *
FROM MY_TABLE
WHERE "Dt" BETWEEN '*-*- 22:00:00' AND '*-*- 02:00:00';

где * должно быть любое ...

Спасибо за вашу поддержку!

РЕДАКТИРОВАТЬ: Язабыл упомянуть: я использую встроенный интерпретатор SQL из браузера БД для SQLite

Ответы [ 5 ]

0 голосов
/ 21 октября 2019

с 22:00:00 до 02:00: 00

означает:

SELECT *
FROM MY_TABLE
WHERE 
  substr(Dt, 12) BETWEEN '22:00:00' AND '23:59:59'
  OR
  substr(Dt, 12) BETWEEN '00:00:00' AND '02:00:00'
0 голосов
/ 17 октября 2019
 select DT_time from (
    select cast (substr(to_char(Dt,'dd-mm-yyyy HH:MM:SS'),12,2) as integer ) as DT_time from MY_TABLE )
 where  DT_time between 2 and 22;
0 голосов
/ 17 октября 2019

Это будет работать ::

SELECT *
FROM MY_TABLE
WHERE DATEPART(HOUR, Dt)>22  
AND DATEPART(HOUR, Dt)<2 

Обновление:

SELECT * 
FROM MY_TABLE 
WHERE Dt Between DATEADD (hour,22,DATEADD(day, DATEDIFF(day, 0, Dt), 0)) AND DATEADD (hour,2,DATEADD(day, DATEDIFF(day, -1, Dt), 0))


SELECT *
FROM MY_TABLE
WHERE DATEPART(HOUR, Dt)>22  
OR DATEPART(HOUR, Dt)<2

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

Для SQLite:

SELECT *
FROM MY_TABLE
WHERE strftime('%H','Dt')>22  
OR strftime('%H','Dt')<2 
0 голосов
/ 17 октября 2019

С Postgres, предполагая, что dt определено как timestamp, вы можете сделать следующее:

SELECT *
FROM MY_TABLE
WHERE "Dt" BETWEEN "Dt"::date + time '22:00:00' and ("Dt"::date + 1) + time '02:00:00'

Или, если вы хотите исключить временные метки с точностью 02:00:00

SELECT *
FROM MY_TABLE
WHERE "Dt" >= "Dt"::date + time '22:00:00' 
  and "Dt" < ("Dt"::date + 1) + time '02:00:00'
0 голосов
/ 17 октября 2019

Вам необходимо извлечь временную часть даты и сравнить, что она находится в пределах диапазона. Поскольку полночь между 22 и 2, вам нужно разделить ее на два сравнения, время между 22 и 0 и между 0 и 2.

Чтобы увидеть, как извлечь время, взгляните на этовопрос .

...