【发布时间】:2023-03-26 01:38:01
【问题描述】:
我正在寻找一些 T-SQL 代码,它应该选择“从当前日期回溯一年(1 月的最后一个星期日)”的日期。
例如:
Current day expected result
2017-02-05 2016-01-31
2017-01-05 2015-01-25
2018-02-19 2017-01-29
2018-01-19 2016-01-31
2019-02-28 2018-01-28
请注意:年份从一月的最后一个星期日开始
我有一些 T-SQL 代码正在 SQL Server 2014 中使用:
select
convert(varchar(10), DATEADD(day, DATEDIFF(day, '19000107', DATEADD(month, DATEDIFF(MONTH, 0, CONVERT(date, CONVERT(VARCHAR(4), (CASE WHEN MONTH(GetDate()) = 1 THEN CONVERT(VARCHAR(4), GetDate(), 112) - 1 ELSE CONVERT(VARCHAR(4), GetDate(), 112) END), 112) + '0101')), 30)) / 7 * 7, '19000107'), 120)
上面的代码选择了当年的日期(一月的最后一个星期日)。但我希望 T-SQL 代码选择去年(1 月的最后一个星期日的日期)的日期。
详细说明 - 我希望 T-SQL 代码从下表中生成 预期结果
Current day T-SQL code answer expected result
2017-02-05 2017-01-29 2016-01-31
2017-01-05 2016-01-31 2015-01-25
2018-02-19 2018-01-28 2017-01-29
2018-01-19 2017-01-29 2016-01-31
2019-02-28 2019-01-27 2018-01-28
请帮忙。
【问题讨论】:
-
将日期解析和操作为字符串通常是不受欢迎的,我猜你没有写那个表达式。如果您想要一年前的日期,只需将每个
getdate()替换为dateadd(year, -1, getdate()。
标签: sql sql-server sql-server-2008 tsql date