【问题标题】:Date filter on column in sqlsql中列的日期过滤器
【发布时间】:2016-07-28 14:59:52
【问题描述】:

我有按日期过滤的查询,现在它只需要从我执行它的那一刻起的最后 24 小时,为此我正在使用下一个代码:

( DateDiff(HH, vw_public_task.complete_date, getdate()) < 25)

有一种方法可以让我的日期过滤器给出过去 24 小时的查询结果,但不取决于我当前的时间,而是在我执行它的任何时候根据“day 08:00am”-“day+1 08:00am”?

例如,如果我现在执行查询,我想查看从昨天 08:00am 到今天 08:00am 的日期结果。

【问题讨论】:

  • 您的代码将在 MySQL 中生成错误。正确标记您的问题。
  • 这适用于哪个 RDBMS?请添加一个标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或者完全是其他东西。

标签: sql-server


【解决方案1】:

您可以使用以下公式计算昨天上午 8 点:

-- Yesterday at 8 am.
SELECT
    DATEADD(HOUR, 8, CAST(CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS DATETIME)) AS Yesterday8AM
;

GetDate 返回当前日期。最里面的date add 减去一天。将其转换为日期会删除时间戳。将其转换回 DateTime 会在昨天午夜给出。现在我们正在处理一个 DateTime,我们可以再次使用 date add 来添加 8 小时。

如果您使用的是 SQL Server 2012 或更高版本,请考虑使用本机函数 DATETIME2FROMPARTS

【讨论】:

  • 是的,我有 2012 版,但我不明白如何将它用于过去 24 小时的过滤器。
  • 此外,当我使用上述代码时,我收到下一个错误“遇到除以零错误”。 -- 发现问题并解决。
  • 我的样本中没有除法。您能否编辑您的问题以包含完整的 SQL,以便我们可以寻找 除以 错误。
  • 我喜欢这个问题并解决了它。我仍然没有找到解决方案如何过滤从 08:00 到 08:00(今天)的最后一天结果。
【解决方案2】:

使用 Date() (How to part DATE and TIME from DATETIME in MySQL)。

( DateDiff(HH, vw_public_task.complete_date, Date(getdate())+8 ) < 25)

【讨论】:

  • +8 对我有什么帮助?
  • 我们去掉时间元素,然后加上 8 小时表示早上 8 点。
猜你喜欢
  • 2013-04-17
  • 2019-11-20
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2021-12-25
  • 2012-12-09
相关资源
最近更新 更多