Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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中找到去年的同一个工作日?_Sql_Sql Server_Tsql - Fatal编程技术网

您如何在SQL中找到去年的同一个工作日?

您如何在SQL中找到去年的同一个工作日?,sql,sql-server,tsql,Sql,Sql Server,Tsql,通常在销售报告等中,您需要将这一天与去年的同一天进行比较,但要基于相同的“工作日”,而不是“月日” 例如,今天是2013年6月20日,是星期四。我想看看今天的销售额,而不是去年的同一个星期四(2012年6月21日,而2012年6月20日是星期三) 如何在T-SQL中实现这一点 DECLARE @now DateTime SET @now = '2013-06-20' -- you could say GETDATE() SELECT DATEADD(day, (DATEPART(week, @n

通常在销售报告等中,您需要将这一天与去年的同一天进行比较,但要基于相同的“工作日”,而不是“月日”

例如,今天是2013年6月20日,是星期四。我想看看今天的销售额,而不是去年的同一个星期四(2012年6月21日,而2012年6月20日是星期三)

如何在T-SQL中实现这一点

DECLARE @now DateTime
SET @now = '2013-06-20' -- you could say GETDATE()
SELECT DATEADD(day, (DATEPART(week, @now) * 7 + DATEPART(weekday, @now)) - (DATEPART(week, DATEADD(year, -1, @now)) * 7 + DATEPART(weekday, DATEADD(year, -1, @now))), DATEADD(year, -1, @now))
结果是:

2012-06-21 00:00:00.000
dateadd('day',-364,@now)
希望这能帮助你

这应该是公认的答案,它完美且易于阅读
DECLARE @now Date
SET @now = '2013-06-20' -- your example
SELECT DATEADD(week, -52, @now)

SET @now = '2012-06-21' -- leap year test
SELECT DATEADD(week, -52, @now)