簡體   English   中英

SQL Server:按周分組1天

[英]SQL Server : group by week off by 1 day

使用語法

dateadd(week, datediff(week, 0, CURRENT_TIMESTAMP),0)

按周分組數據似乎將一周的最后一天放入下一周。

在一個簡單的例子中

print dateadd(week, datediff(week, 0, '27 jan 2012 00:00'),0)
print dateadd(week, datediff(week, 0, '28 jan 2012 00:00'),0)
print dateadd(week, datediff(week, 0, '29 jan 2012 00:00'),0)
print dateadd(week, datediff(week, 0, '30 jan 2012 00:00'),0)
print dateadd(week, datediff(week, 0, '31 jan 2012 00:00'),0)

我希望能回來

Jan 23 2012 12:00AM
Jan 23 2012 12:00AM
Jan 23 2012 12:00AM
Jan 30 2012 12:00AM
Jan 30 2012 12:00AM

要么

Jan 22 2012 12:00AM
Jan 22 2012 12:00AM
Jan 29 2012 12:00AM
Jan 29 2012 12:00AM
Jan 29 2012 12:00AM

我想,取決於DATEFIRST設置

然而它又回來了

Jan 23 2012 12:00AM
Jan 23 2012 12:00AM
Jan 30 2012 12:00AM
Jan 30 2012 12:00AM
Jan 30 2012 12:00AM

即1月29日是1月30日那一周,而不是1月23日或1月30日。

我顯然錯過了一些東西,卻想不出它會是什么。

這是對的。

不管是什么@@DATEFIRST是,總是有相同數量的整周的現在和01一月1900之間作為@@DATEFIRST的變化,它影響 “開始”和“結束”的一周。

然后DATEADD只增加7天的時間段,因為它忽略了@@ DATEFIRST

您可以通過選擇DATEADD基礎來強制它

示例:1900年1月1日是星期一。

你想要周日嗎? 然后根據1899年12月31日

print dateadd(week, datediff(week, 0, '27 jan 2012 00:00'),-1)
print dateadd(week, datediff(week, 0, '28 jan 2012 00:00'),-1)
print dateadd(week, datediff(week, 0, '29 jan 2012 00:00'),-1)
print dateadd(week, datediff(week, 0, '30 jan 2012 00:00'),-1)
print dateadd(week, datediff(week, 0, '31 jan 2012 00:00'),-1)

你想要周二嗎? 然后基地到1900年1月2日

print dateadd(week, datediff(week, 0, '27 jan 2012 00:00'),1)
print dateadd(week, datediff(week, 0, '28 jan 2012 00:00'),1)
print dateadd(week, datediff(week, 0, '29 jan 2012 00:00'),1)
print dateadd(week, datediff(week, 0, '30 jan 2012 00:00'),1)
print dateadd(week, datediff(week, 0, '31 jan 2012 00:00'),1)

這應該將日期轉換為一周的第一天以進行分組

set datefirst 1
select dateadd(day, -1 * (datepart(weekday, getdate()) - 1), getdate())

請注意, set datefirst 1將星期的第一天設置為星期一。 您可以更改此語句以更改一周的第一天以符合您的期望(請參閱http://msdn.microsoft.com/en-us/library/ms181598.aspx

DATEDIFF不尊重DATEFIRST設置。

這是一個類似的問題,有一個潛在的解決方法:

是否可以為T-SQL DATEDIFF函數設置星期開始?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM