如何在SQL中的两个特定时间之间找到数据

时间:2011-08-16 14:12:42

标签: sql date time between

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

我尝试过多次selectbetween次查询,这些查询会在错误的日期或超出时间范围内返回数据。

5 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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)

我确信有更好的方法。

答案 2 :(得分: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'

答案 3 :(得分:0)

这也可以帮助你

.my-form {
  // Some styles

  &__input {
    //Some styles

    &[type="text"] { // generates .my-form__input[type="text"]
      border: 2px solid red;
    }
  }

  &__button {
    //Some styles
  }
}

答案 4 :(得分: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