T-SQL 查询以获取从今天起 +30 天的日期

Posted

技术标签:

【中文标题】T-SQL 查询以获取从今天起 +30 天的日期【英文标题】:T-SQL query to get a date +30 days from today exactly 【发布时间】:2019-11-15 06:49:22 【问题描述】:

数据采用日期/时间格式,我正在尝试获取从今天起 30 天内日期精确的行列表。这是基于 SQL Server 2005 的。

所以在 7 月 1 日,我会得到一个日期为 8 月 1 日的行列表。

示例条目是:

1993 年 7 月 4 日星期日上午 12:00

但是由于某种原因,我的查询似乎根本没有返回任何行。

AND DATEPART("month", a.PersonBirthdate) = DATEPART("month", GetDate())
AND DATEPART("day", a.PersonBirthdate) = DATEPART("day", GetDate()+30)

例如,下面的查询部分可以很好地获取日期所在的行列表:

AND DATEPART("month", a.PersonBirthdate) = DATEPART("month", GetDate())
AND DATEPART("day", a.PersonBirthdate) = DATEPART("day", GetDate())

【问题讨论】:

检查 DATEADD 是否在 sql server 2005 中工作:DATEADD (MONTH, 1, GetDate()) @Antonio - 虽然the docs say it started in 2008,但我可以确认它在 2005 年确实有效。还有 1 个月!= 30 天 @Rain - 只是一个小点,但 7 月有 31 天,所以在 7 月 1 日加上 30 将导致 7 月 31 日......而不是 8 月 1 日 是时候更新到受支持的 SQL Server 版本了。 您的第一个代码 sn-p 检查 当前 月 (DATEPART("month", GetDate())) 和 30 天后的天数 (DATEPART("day", GetDate()+30))。在大多数情况下,30 天后将是 个月。 【参考方案1】:

要将今天加上 30 天计算为 Date,您可以使用:

DateAdd( day, 30, Cast( GetDate() as Date ) )

请注意,如果您尝试通过具有该日期的 DateTime 列检索行,您将使用:

where DateAdd( day, 30, Cast( GetDate() as Date ) ) <= DateTimeColumn and
  DateTimeColumn < DateAdd( day, 31, Cast( GetDate() as Date ) )

这将包括从第二天开始直到午夜的所有时间,但不包括。条件是SARGABLE,这样它就可以从索引中受益。

【讨论】:

【参考方案2】:

我几年前创建了一个名为 GetJustDate 的 UDF,它只返回日期,并删除所有小时/分钟/秒/等。

ALTER FUNCTION [dbo].[GetJustDate] (@DATE datetime)
RETURNS datetime AS  
BEGIN 
    RETURN DATEADD(dd, 0, DATEDIFF(dd, 0, @DATE))
END

如果您使用它并添加 30 天,您将获得您想要匹配的未来日期...

DECLARE @FUTURE DATETIME = DATEADD(d, 30, dbo.GetJustDate(@DATE))

一旦你有了,你可以将行中的日期(在获取日期之后)与新变量进行比较......

AND dbo.GetJustDate(a.PersonBirthdate) = @FUTURE

或者,如果您不想使用 UDF,则只需直接使用 DATEADD/DATEDIFF...

DECLARE @FUTURE DATETIME = DATEADD(dd, 30, DATEDIFF(dd, 0, @DATE))
AND DATEADD(dd, 0, DATEDIFF(dd, 0, a.PersonBirthdate)) = @FUTURE

【讨论】:

【参考方案3】:

非常非常简单的方法可以让您找到正确的方法:

SELECT DATEPART(DD, CAST(GETDATE()+30 as date )) 

虽然 Datepart 不是最快的,所以我想首先你需要自己定义为什么你需要先检查月份,然后是日期。

【讨论】:

以上是关于T-SQL 查询以获取从今天起 +30 天的日期的主要内容,如果未能解决你的问题,请参考以下文章

Wp查询日期之间的帖子,但任何年份

使用“where”在数据库上获取“计数”以设置日期限制

创建Sharepoint过滤器以显示30天内到期的文档

LeetCode:Database 50.每日新用户统计

LINQ 查询以获取过去 30 天的记录

仅获取从一周的第一天到一周的当前日期的数据