【问题标题】:Raw SELECT (without FROM) of most recent 7 days to current最近 7 天到当前的原始 SELECT(不含 FROM)
【发布时间】:2022-01-03 07:38:32
【问题描述】:

我想获取最近 7 个日期(不包括时间)的查询结果(例如填充表)。我知道我们可以选择一些没有 F​​ROM 语句的标量。所以我最终得到了以下解决方案:

select DATEADD (DAY, 0, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-1, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-2, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-3, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-4, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-5, CONVERT(date, GetDate()))
Union
select DATEADD (DAY,-6, CONVERT(date, GetDate()))

如果有更好(更优雅)的解决方案,请指点我。

【问题讨论】:

    标签: sql sql-server date tsql


    【解决方案1】:

    您还可以通过使用永久数字/计数表(总是很方便)或通过从任何合适的表生成数字列表来扩展values 表,然后您可以创建任何时期的日期列表

    select dateadd(day, n.v, convert(date, getdate()))
    from (
      select top (30) v=-1 * Row_Number() over(order by (select 1))
        from master.dbo.spt_values
    )n
    order by n.v;
    

    【讨论】:

      【解决方案2】:

      VALUES,表值构造函数,更简洁一些。

      select dateadd(day, x.num, convert(date, getdate()))
      from (
        values (0), (-1), (-2), (-3), (-4), (-5), (-6)
      ) x (num)
      order by x.num;
      

      返回:

      Date
      2021-11-18
      2021-11-19
      2021-11-20
      2021-11-21
      2021-11-22
      2021-11-23
      2021-11-24

      【讨论】:

      • 天哪,它有效)谢谢))
      • @YKPAIHELIb 请务必接受答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多