【发布时间】:2017-05-17 11:14:29
【问题描述】:
我希望 SQL 查询自动获取日期,
请注意:年份应始终从一月的最后一个星期日开始。
我想要以下示例的 SQL 查询;假设当前日期是 '2017-01-01'
SQL 应该选择这些日期:
Between '2016-01-31' and '2016-12-31'
(在“年初(一月的最后一个星期日)”和“前一周的最后一天(星期六)”之间)
我有这个问题:
Between
case
When DatePart(w, DateAdd(d, 30, DATEADD(y, - DatePart(y, GetDate()) + 1, GetDate()))) = 1
Then DateAdd(d, 30, DATEADD(y, - DatePart(y, GetDate()) + 1, convert(date, GetDate())))
Else DateAdd(d, 7 - DatePart(w, DateAdd(d, 30, DATEADD(y, - DatePart(y, GetDate()) + 1, GetDate()))) + 1, DateAdd(d, 30, DATEADD(y, - DatePart(y, GetDate()) + 1, convert(date, GetDate())))
)
end
and
convert(date, dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) + 5)
以上查询返回错误结果:
示例 1:错误
假设当前日期是 '2017-01-01',SQL 查询返回这些日期:
Between '2017-02-05' and '2016-12-31'
哪些是错误的。
示例 2:正确
假设当前日期为 '2017-02-12',则 SQL 查询返回这些日期:
Between '2017-02-05' and '2017-02-11'
这是正确的日期 - 好的。
问题总是在当前日期在一月份时
请问如何解决示例 1?任何更新的 SQL 查询?
【问题讨论】:
-
您运行的是哪个版本的 SQL Server?如果至少在 2012 年,EOMONTH 函数可能会对您有用!
-
@bridge,SQL Server 2014
-
您提到年份应该始终从 2 月 1 日开始,那么您将如何获得 '2016-01-31' 和 '2016-12-31' 之间的 '2017-01-01' ,我认为应该是'2016-02-07'和'2016-12-31'之间
标签: sql sql-server tsql date datetime