【问题标题】:Only filter my time in SQL Server where clause仅在 SQL Server where 子句中过滤我的时间
【发布时间】:2015-04-18 16:55:41
【问题描述】:

总的来说,我是 SQL 和编程的新手。我有一个日期时间字段,我想用它来过滤我的结果,但仅限于时间部分。

例如,我需要从昨天下午 2 点到当天早上 7 点运行报告。我无法对日期进行硬编码,因为该报告需要每天运行。此查询将自动从存储过程运行。

我已经尝试过 AND clm.createDtTm > DATEADD(d, -1, GETDATE()),它可以追溯到一天,但不是我需要的时间范围。

我试过这个:AND (datepart(hh, '11:02:54.107') = 7)

我不确定这是否可能,但如果我能在一天内得到结果,我假设必须有一种方法来缩小这一天的时间。

任何帮助将不胜感激。

谢谢,

阿卜杜勒

【问题讨论】:

    标签: sql-server datetime where-clause


    【解决方案1】:

    “我不能硬编码日期”是什么意思?你的意思是时间间隔是可变的,还是固定的,或者你指的是确切的日期?我不确定我是否理解。

    如果是 MySQL,您可以执行以下操作:

    SELECT data, date FROM table WHERE date < DATE_SUB(NOW(), INTERVAL 2 DAY);
    

    此查询将为您提供最后两天的信息。如果可能的话,您可以通过用变量替换“2”来改变间隔。

    【讨论】:

      【解决方案2】:

      这应该可以解决问题,它会过滤掉不属于日期间隔的行,从昨天晚上 7 点到今天早上 7 点。

      WHERE
          createDtTm >= DATEADD(HOUR, 14,CAST(DATEADD(DAY,-1, CAST(GETDATE() AS DATE)) AS DATETIME))
          AND createDtTm <= DATEADD(HOUR, 7, CAST(CAST(GETDATE() AS DATE) AS DATETIME))
      

      【讨论】:

      • 感谢耶稣,这对我很有帮助,我学到了一些新东西。我相信它有效,但我的开发环境中没有测试数据,因为它会拉回任何数据。创建一些测试数据后必须对其进行测试。
      • 我测试过,这两个表达式都给你预期的结果。
      • 嗨耶稣,这可以通过做一个案例陈述来完成,这样它就可以在一个查询中吗?类似于:AND CASE WHEN DATEADD(day, datediff(day, 0, getdate()), 0) + '18:00'= GETDATE() THEN clm.createDtTm >= DATEADD(HOUR, 14,CAST(DATEADD(DAY ,-1, CAST(GETDATE() AS DATE)) AS DATETIME)) AND clm.createDtTm
      • 是的,你可以...,但你不应该。当您将列括在表达式中时,您会阻止 SQL Server 使用索引。您应该在 where 子句中编写谓词,例如:ColumnName operator Expression 以允许 SQL Server 使用索引
      【解决方案3】:

      我建议是这样的:

      SELECT(DATEADD(d,-1,GETDATE()))
        FROM table
       WHERE (DATEADD(d,-1,GETDATE())) = rowloadtimestamp
      HAVING DATEPART(HH,rowloadtimestamp) BETWEEN 13 AND 24
      
      UNION
      
      SELECT GETDATE()
        FROM table
       WHERE GETDATE() = rowloadtimestamp
      HAVING DATEPART(HH,GETDATE()) BETWEEN 1 AND 7
      

      假设您有一个 rowloadtimestamp 字段,这应该适合您。

      【讨论】:

        猜你喜欢
        • 2016-07-02
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2020-03-21
        相关资源
        最近更新 更多