SQL Server 未显示给定日期的正确周数
SQL Server 显示 2011 年第一周(1 月 1 日除外)的第 53 周,并且需要是第 1 周
。以下是查询和输出:
declare @T table (dt datetime)
insert into @T values
('2010-12-26'),
('2010-12-27'),
('2010-12-28'),
('2010-12-29'),
('2010-12-30'),
('2010-12-31'),
('2011-01-01'),
('2011-01-02'),
('2011-01-03'),
('2011-01-04'),
('2011-01-05'),
('2011-01-06'),
('2011-01-07'),
('2011-01-08')
select dt,DATEPART(wk,dt) from @T
输出:
2010-12-26 00:00:00.000 53
2010-12-27 00:00:00.000 53
2010-12-28 00:00:00.000 53
2010-12-29 00:00:00.000 53
2010-12-30 00:00:00.000 53
2010-12-31 00:00:00.000 53
2011-01-01 00:00:00.000 1
2011-01-02 00:00:00.000 2
2011-01-03 00:00:00.000 2
2011-01-04 00:00:00.000 2
2011-01-05 00:00:00.000 2
2011-01-06 00:00:00.000 2
2011-01-07 00:00:00.000 2
2011-01-08 00:00:00.000 2
我希望 SQL Server 显示从 12 月 26 日到 1 月 1 日的第 1 周。有人知道如何做到这一点吗?
谢谢和问候, 阿施温。
SQL Server is showing week 53 for first week of 2011 except 1th of January, and needs to be week 1.
Below is the query and output:
declare @T table (dt datetime)
insert into @T values
('2010-12-26'),
('2010-12-27'),
('2010-12-28'),
('2010-12-29'),
('2010-12-30'),
('2010-12-31'),
('2011-01-01'),
('2011-01-02'),
('2011-01-03'),
('2011-01-04'),
('2011-01-05'),
('2011-01-06'),
('2011-01-07'),
('2011-01-08')
select dt,DATEPART(wk,dt) from @T
Output:
2010-12-26 00:00:00.000 53
2010-12-27 00:00:00.000 53
2010-12-28 00:00:00.000 53
2010-12-29 00:00:00.000 53
2010-12-30 00:00:00.000 53
2010-12-31 00:00:00.000 53
2011-01-01 00:00:00.000 1
2011-01-02 00:00:00.000 2
2011-01-03 00:00:00.000 2
2011-01-04 00:00:00.000 2
2011-01-05 00:00:00.000 2
2011-01-06 00:00:00.000 2
2011-01-07 00:00:00.000 2
2011-01-08 00:00:00.000 2
I want SQL Server to show week 1 from Dec 26th - Jan 1th. Does anybody know how to accomplish this?
Thanks and regards,
Aschwin.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这比我最初预期的要困难得多。我正在对比去年年底,看看是否有资格进入新的一年。如果是这样,我将周设置为 1,否则我只使用正常周。
证明:
https://data.stackexchange.com/stackoverflow/q/110527/
It was alot harder than I first expected. I am comparing the end of last year to see if it is qualified to be part of the new year. If so i set the week as 1, otherwise i just use the normal week.
Proof:
https://data.stackexchange.com/stackoverflow/q/110527/
我不确定它是否适用于所有年份(但看起来像),但您可以使用 CASE 语句。
新的 ISO_WEEK 日期部分不适用于您请求的输出。
I am not sure it holds for all years (but it looks like it) but you could solve this using a CASE statement.
The new ISO_WEEK datepart doesn't apply to your requested output.
我创建了 2 个函数来处理这个问题
1)获取一周的第一天或最后一天
2)获取周数或年份
函数1
函数2
运行示例
结果:
I Created 2 functions to deal with this issue
1) to get First or last day of the week
2) to get the week number or year
function 1
Function 2
Running Example
result:
另一种检索当年总周数的方法:
Another way to retrieve the total number of weeks in current year: