Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何获取今天最后12个月的日期?_Sql_Sql Server_Tsql_Recursive Query_Date Arithmetic - Fatal编程技术网

Sql 如何获取今天最后12个月的日期?

Sql 如何获取今天最后12个月的日期?,sql,sql-server,tsql,recursive-query,date-arithmetic,Sql,Sql Server,Tsql,Recursive Query,Date Arithmetic,我怎样才能得到截至今天的最后12个月的日期 例: 我试过这个: SELECT GETDATE() 'Today', DATEADD(mm,-1,GETDATE()) 但这只给了我上个月的时间。如果要生成这些行,可以使用递归查询: with cte as ( select 0 n union all select n + 1 from cte where n < 12 ) select dateadd(month, -n, convert(date,

我怎样才能得到截至今天的最后12个月的日期

例:

我试过这个:

SELECT GETDATE() 'Today', 
           DATEADD(mm,-1,GETDATE())

但这只给了我上个月的时间。

如果要生成这些行,可以使用递归查询:

with cte as (
    select 0 n
    union all select n + 1 from cte where n < 12
)
select dateadd(month, -n, convert(date, getdate())) dt from cte order by dt

这将为您提供今天的日期,以及前12个月当月的同一天,因此总共有13行。您可以将cte中的不等式条件调整为所需的精确迭代次数。如果需要超过100次迭代,则需要在查询末尾添加选项maxrecursion 0。

可以使用递归CTE,但有时这些会对性能产生相当负面的影响。如果您没有在这里有用的数字表,可以使用系统表生成行,并使用ROW_NUMBER窗口函数为它们指定数字1..12,如下所示:

select top 12 dateadd(month, 1-row_number() over (order by (select null)), getdate()) 
  from sys.all_objects
需要生成一个介于1和12之间的数字序列。挑一个。一旦您有了序列,您只需要将DATEADD添加到其中,例如:

SELECT DISTINCT
DATEADD(MONTH, 0-Number, GETDATE())
FROM master.dbo.spt_values
WHERE Number BETWEEN 1 AND 12

在我看来,在这里使用在线计数似乎很简单:

选择DATEADDMONTH、T.I、V.[日期] 从VALUESCONVERTdate,GETDATEV[Date] 交叉应用值0、-1、-2、-3、-4、-5、-6、-7、-8、-9、-10、-11TI;
非常感谢GMB。它就像一个符咒。Cheers有没有一种方法可以在下个月的时候动态添加月份?如果今天是该月的31号,您希望得到什么结果?这是可行的,但是有没有一种方法可以动态添加,而不是像ex:top 12 from This month shows last 12 month那样手动添加,但是如果是This:select top 10 dateaddmonth,通过选择null、convertdate、getdate+30天从sys获得订单上的1行\u编号。所有\u对象都有一种方法可以获得2020年1月的数据吗
SELECT DISTINCT
DATEADD(MONTH, 0-Number, GETDATE())
FROM master.dbo.spt_values
WHERE Number BETWEEN 1 AND 12