2

我需要运行一个查询来查找昨天凌晨 2 点到今天凌晨 2 点之间发生的所有登录日期 ( dd/mm/yyyy) 和时间 ( )。hh.mm数据库中的登录时间格式为mm-dd-yyyy hh.mm.ss.

我尝试了多个查询selectbetween这些查询要么在错误的日期或时间跨度之外返回数据。

4

5 回答 5

6

根据您提供的信息,我只能举一个通用的例子:

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

**编辑**

根据评论中的一个好建议,这是一个可重复使用的版本:

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'
于 2011-08-16T14:15:42.207 回答
1

假设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)

不过我敢肯定有更好的方法。

于 2011-08-16T14:34:46.460 回答
1

如果我们使用如下查询,则查询不会返回任何记录...

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'

我们正在使用 between 子句,所以最早的日期应该是第一个,查询变成如下......

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'
于 2013-07-01T18:29:39.757 回答
0

这也可以帮助你

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)
于 2017-11-08T07:21:14.147 回答
0

我认为您可以使用以下提示:

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
于 2019-05-02T15:32:33.987 回答