代码之家  ›  专栏  ›  技术社区  ›  Prashant Pimpale Dila Gurung

如何在SQL Server中选择最后七天的日期

  •  1
  • Prashant Pimpale Dila Gurung  · 技术社区  · 6 年前

    我想在select语句中选择最近七天的日期作为当前日期 2018-07-12

    预期结果:

    最后七天的日期
    2018年7月6日
    2018年7月7日
    2018年7月8日
    2018年7月9日
    2018年7月10日
    2018年7月11日
    2018年7月12日

    5 回复  |  直到 6 年前
        1
  •  5
  •   sniperd Ali Ahmed    6 年前

    如果您在问题中列出的预期结果正是您想要的,那么这就可以做到:

    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
    )
    
        2
  •  3
  •   Gordon Linoff    6 年前

    我将使用递归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;
    
        3
  •  3
  •   Tom Halson    6 年前

    我使用以下内容生成日期序列

    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
  •  1
  •   Mohaalak    6 年前

    你可以用

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

    关于你的问题

        5
  •  1
  •   Zaynul Abadin Tuhin    6 年前
    select * from your_table
    where  date_field>=dateadd(day,-7,cast(getdate() as date)) and date_field<cast(getdate() as date)