如何在 SQL Server 中选择最近 7 天的日期

Posted

技术标签:

【中文标题】如何在 SQL Server 中选择最近 7 天的日期【英文标题】:How to select last seven day's dates in SQL Server 【发布时间】:2018-07-12 13:04:53 【问题描述】:

我想在 select 语句中选择最近 7 天的日期,因为当前日期是 2018-07-12

预期结果:

Last_Seven_Days_Dates 2018-07-06 2018-07-07 2018-07-08 2018-07-09 2018-07-10 2018-07-11 2018-07-12

【问题讨论】:

可能重复:***.com/questions/27599557/… How to get last 7 days data from current datetime to last 7 days in sql server的可能重复 我不想在任何情况下使用它,只想要问题描述的结果并将其存储在临时表中 【参考方案1】:

如果您在问题中列出的预期结果正是您想要的,那么这将起到作用:

SELECT * FROM (
    SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
) AS the_table

结果:

Last_Seven_Days_Dates
---------------------
2018-07-05
2018-07-06
2018-07-07
2018-07-08
2018-07-09
2018-07-10
2018-07-11
2018-07-12

既然你说你需要这些在临时表中,我已经更新了答案,使它成为一个子查询,更容易加入或做一些事情。

另外,如果您在临时表中需要它,您可以这样做:

SELECT * INTO #TempTableName FROM (
    SELECT CAST(GETDATE() AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -2, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -3, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -4, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -5, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -6, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
    UNION
    SELECT CAST(DATEADD(DAY, -7, GETDATE()) AS DATE) AS Last_Seven_Days_Dates
)

【讨论】:

感谢我也搜索了上述查询。有什么选择吗? 对不起,我不明白这个问题:) 你在找什么选项? 除了联合其他选项来获取最近 7 天的日期吗? 我想您可以构建一个游标或使用 CTE,但我认为最终您需要合并结果。 @sniperd 我已经添加了一个插入临时表到您的答案的示例,只是更改了格式。【参考方案2】:

我会使用递归 CTE:

with dates as (
      select cast(getdate() as date) as dte, 1 as cnt
      union all
      select dateadd(day, 1, dte), cnt + 1
      from dates
      where cnt < 7
     )
select dte
from dates;

【讨论】:

如果你能在this帮助我,我会非常有帮助【参考方案3】:

我使用以下来生成日期系列

DECLARE @MinDate DATE = DATEADD(DAY, -7, GETDATE()),
        @MaxDate DATE = GETDATE();

SELECT  TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
        Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM    sys.all_objects a;

如果您需要使其可重用,您可以将其包装在一个函数中并传入 MinDate 和 MaxDate

【讨论】:

【参考方案4】:

你可以使用

DATEADD(DAY, -7, getDate()) < [date_field]

关于您的查询

【讨论】:

【参考方案5】:
select * from your_table
where  date_field>=dateadd(day,-7,cast(getdate() as date)) and date_field<cast(getdate() as date)

【讨论】:

我不想在任何情况下使用它,只想要问题描述的结果并将其存储在临时表中

以上是关于如何在 SQL Server 中选择最近 7 天的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何将滚动 7 天和 30 天的列添加到我每天在 SQL Server 中的不同登录次数中

Sql Server函数日期时间函数日期查询今天昨天7天内30天的数据

如何在 MySQL 中选择最近 30 天的日期?

mysql如何出查出最近7天,最近30天,最近n天的记录?

如何通过特殊原始数据从数据库中获取最近 7 天的记录

PHP+mysql 查询 今天,昨天,最近7天的数据?