Как я могу найти данные между двумя конкретными временами в SQL - PullRequest
1 голос
/ 16 августа 2011

Мне нужно выполнить запрос, который находит все даты входа в систему (dd/mm/yyyy) и время (hh.mm), которые произошли между 2:00 вчера и 2:00 сегодня. Время входа в базу данных отформатировано как mm-dd-yyyy hh.mm.ss.

Я пробовал несколько запросов select и between, которые возвращают данные не в тот день или за пределами промежутков времени.

Ответы [ 5 ]

6 голосов
/ 16 августа 2011

На основании предоставленной вами информации я могу привести только общий пример:

SELECT    *
FROM      [YourTable]
WHERE     [YourDate] BETWEEN '08-15-2011 02:00:00' AND '08-16-2011 02:00:00'

** EDIT **

За хорошее предложение от комментариев, вот многоразовая версия:

SELECT    *
FROM      [YourTable]
WHERE     [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
                     AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'
1 голос
/ 01 июля 2013

Запрос не возвращает никаких записей, если мы используем следующее ...

SELECT    *
FROM      [YourTable]
WHERE     [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
                 AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'

Мы используем предложение между, поэтому самая старая дата должна быть первой, а запрос становится следующим ...

SELECT    *
FROM      [YourTable]
WHERE     [YourDate] BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()-1), 0) + '02:00'
                 AND DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) + '02:00'
1 голос
/ 16 августа 2011

Предполагая, что mysql:

SELECT * FROM your_table 
WHERE STR_TO_DATE(your_date, '%m-%d-%Y %H.%i.%s') BETWEEN
DATE_SUB(STR_TO_DATE(DATE_FORMAT(NOW(), '%m-%d-%Y'), '%m-%d-%Y'), INTERVAL 22 HOUR) AND
DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%m-%d-%Y'), '%m-%d-%Y'), INTERVAL 2 HOUR)

Я уверен, что есть лучший способ.

0 голосов
/ 02 мая 2019

Я думаю, вы можете использовать эти советы:

SET @start = CURDATE() - interval 1 DAY + interval 2 HOUR;
SET @end = CURDATE() + interval 2 HOUR;

А:

SELECT * FROM TABLE_NAME WHERE DATE_FIELD BETWEEN @start AND @end
0 голосов
/ 08 ноября 2017

Это также может помочь вам

where pt.status in (1) 
    and pt.is_visible in ('t') 
    and pt.merchant in (0) 
    and (date(pt.created_at+'05:30') >= current_date-2 
            and extract(hour from(pt.created_at+'05:30')) >=17)
    and ((pt.created_at+'05:30') <= current_date-1
            and extract(hour from(pt.created_at+'05:30')) <=17)
...