【问题标题】:How can I find the data between two specific times in SQL如何在 SQL 中找到两个特定时间之间的数据
【发布时间】:2011-10-28 02:47:57
【问题描述】:

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

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

【问题讨论】:

  • 您的数据结构是什么,您尝试过哪些查询,结果是什么,预期的结果是什么?
  • 您的日期时间存储在什么数据类型中?它们是存储为字符串数据还是本地日期/时间格式?
  • 我试过 Select login from employeelogins where login between datepart(hh, getdate()-1) > 2 and datepart(hh, getdate()) > 2... 我是新手我现在完全糊涂了..
  • WHAT 数据库和哪个版本? SQL 只是结构化查询语言 - 许多 数据库系统使用的语言 - SQLNOT 数据库产品....这些功能通常是特定于供应商的...

标签: sql date time between


【解决方案1】:

我认为您可以使用这些提示:

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

【讨论】:

    【解决方案2】:

    这也可以帮助你

    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)
    

    【讨论】:

      【解决方案3】:

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

      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'
      

      【讨论】:

        【解决方案4】:

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

        我相信还有更好的方法。

        【讨论】:

          【解决方案5】:

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

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

          **编辑**

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

          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'
          

          【讨论】:

          • 如果我必须在其他日期和时间之间获取一个时间怎么办?
          • 对不起,这不是我的问题,我也没有投反对票。我几乎不反对任何问题。但我的观点是昨天和今天可以是不同的日期。如果我明天必须运行此查询怎么办?
          • @Vinay,对不起,我开枪了,我道歉。你说的对。我更新了我的答案。
          • 这是我需要的东西,但是具体日期不存在,因为查询需要每天运行以查找“昨天”凌晨 2 点和“今天”凌晨 2 点之间的记录...
          • @Withdal​​ot,EDIT 部分下的 SQL 将满足该要求。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-08
          • 2018-08-29
          相关资源
          最近更新 更多