【问题标题】:Get data between two times for the last 30 days获取过去 30 天内两次之间的数据
【发布时间】:2016-06-08 15:27:58
【问题描述】:

我有一个查询要提取过去 30 天的数据,我正在使用此功能

DATEADD(day, -30, GETDATE())

我正在获取数据,但它似乎丢失了一些数据 就像我查看特定日期的数据时,它不包括我丢失的所有 24 小时数据。我需要数据包括过去 30 天每天的 24 小时数据。

select 
    *
from 
    Travel R
where 
    R.s9_date > CONVERT(date, DATEADD(day, -30, GETDATE())) 
order by 
    R.s9_date

谢谢

【问题讨论】:

标签: sql-server


【解决方案1】:

GETDATE() 返回一个日期时间,其中包括小时、分钟、秒等。因此,当您从中减去 30 天时,减去的值也将包含时间部分。

假设您使用的是 SQL Server 2008 或更高版本,您可以通过使用 CONVERT 函数包装 DATEADD 函数来将日期时间转换为日期:

CONVERT(date, DATEADD(day, -30, GETDATE()))

【讨论】:

  • 谢谢 Rick,我尝试了您的建议,但仍然缺少数据。如果我希望它显示过去 30 天每天早上 5:00 到早上 5:00 的数据怎么办?
  • 您应该在原始问题中发布您的查询。
  • 我唯一能想到的是 s9_date 只是存储一个日期。在这种情况下,您需要使用 >= 而不是 >
  • s9_date 列是日期时间类型。我试过 >= 但也没有用。
  • 我可以这样做吗? (DateAdd("d",-30,Today) & " 03:00:00 AM") 选择过去 30 天的两个日期之间的数据?我知道这不是正确的公式,但我想知道是否有这样的东西?我对 SQL 很陌生。
【解决方案2】:

我相信CAST 是在 SQL Server 2005 中引入的

select
    *
from
    Travel R
where
    R.s9_date > CAST(DATEADD(DAY, -30, GETDATE()) AS DATE)
order by
    R.s9_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2017-01-10
    • 2013-05-19
    • 2011-01-03
    • 2017-03-20
    相关资源
    最近更新 更多