使用语法
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
,从现在到1900年1月1日之间,整个星期的数量始终是相同的。随着@@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)