【问题标题】:Select rows from the past 24 hours until a certain hour this morning选择过去 24 小时到今天早上某个小时的行
【发布时间】:2023-03-10 18:23:01
【问题描述】:

我想选择我数据库中过去 24 小时内的所有行,但不是每次都到当前时间,而是直到今天的某个小时。我应该添加以下语句?

到目前为止,每当用户使用以下语句访问网页时,我都会得到过去 24 小时的结果:

tad510.t_edte >= DATEADD(day,-1,GETDATE()) -- t_edte is a datetime

但问题是我想显示过去 24 小时的结果,直到从视图控制器调用函数的当天凌晨 5 点。

我正在考虑做一些事情:

tad510.t_edte > DATEADD(day,-1,GETDATE())+'05:00:00'

但我不确定它是否正确

如果你们能告诉我如何做到这一点,那将非常有帮助,以便我得到预期的结果。 非常感谢您!

【问题讨论】:

  • MySQL 还是 SQL Server?那是完全不同的产品。那 sn-p 看起来 像 T-SQL,这表明 SQL Server,而不是 MySQL。
  • MySQL SQL 服务器。请不要混用不同RDBMS的标签
  • 对不起,这是 SQL-Server 的
  • 如果是 2019-10-02 凌晨 4 点呢?是否要显示 2019-10-01 5AM 到 2019-10-02 5AM 之间的所有数据?
  • @SalmanA 是的,就是这样

标签: sql-server tsql datetime


【解决方案1】:

您可以使用这样的 WHERE 子句:

WHERE t_edte >= DATEADD(HOUR, -19, CAST(CAST(CURRENT_TIMESTAMP AS DATE) AS DATETIME))
  AND t_edte <  DATEADD(HOUR,   5, CAST(CAST(CURRENT_TIMESTAMP AS DATE) AS DATETIME))

2019-10-02 07:16:54.453 上,它将获取2019-10-01 05:002019-10-02 05:00 之间的数据。 Demo on db<>fiddle.

【讨论】:

  • 您能否进一步向我解释您的回答?谢谢
  • @achraf 这两个 DATEADD 函数将计算昨天上午 5:00 和今天凌晨 5:00。 See this fiddle for example cases
  • 所以如果我调用这个函数,比如说在 10 月 4 日上午 10:15,它仍然会在 10 月 3 日上午 05:00 到 10 月 4 日上午 05:00 之间显示结果?而不是从 10:15 到 05:00 不像上面的答案?谢谢1
  • 它应该显示 10 月 3 日上午 05:00 到 10 月 4 日上午 05:00 之间的日期。我还没有测试,但你可以检查小提琴...编辑日期进行测试并检查结果。
【解决方案2】:

一种方法,将GETDATE() 转换为date(然后返回datetime)并增加5 小时。

WHERE tttaad510100.t_edte >= DATEADD(DAY, -1, GETDATE())
  AND tttaad510100.t_edte < DATEADD(HOUR, 5, CONVERT(datetime,CONVERT(date, GETDATE())))

【讨论】:

  • 可能从Where 子句中删除Select。 :-)
  • Opps,来自测试。谢谢@WEI_DBA
  • @Larnu 所以如果我调用这个函数,比如说在 10 月 4 日上午 10:15,它仍然会在 10 月 3 日上午 05:00 到 10 月 4 日上午 05:00 之间显示结果?
  • 不,10:15 到 05:00 @AchrafRAGUI。 05:00 之前的说法是 24 小时前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 2020-01-08
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多