微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – ISO Week vs SQL Server Week

好的,所以我有一份报告本周和上周比较,我们的客户注意到他们的数据“很时髦”.经过进一步调查,我们发现根据ISO标准,它没有正确进行数周.我将此脚本作为测试用例运行.
SET DATEFirsT 1
SELECT DATEPART(WEEK,'3/26/13'),DATEPART(WEEK,'3/27/12'),'3/20/12'),'1/2/12')
SELECT DATEPART(ISO_WEEK,DATEPART(ISO_WEEK,'1/2/12')

跑步时我得到了这些结果.

我认为这很奇怪,所以我做了一些挖掘,发现sql Server将1月1日作为一年中的第一周,ISO计算1月的第一个星期日作为一年的第一周.

然后问题最终是两倍.问题1为什么会这样?问题2有没有办法改变这个,所以我不需要修改我的所有代码到处使用ISO_Week?

解决方法

sql Server首次实现WEEK日期/部分时,他们必须做出选择.我不认为它有太多的意识,除了与当时最常见的标准保持一致 – 记住这是在符合标准不是首要任务的时候(否则我们没有像时间戳,IDENTITY和TOP).他们后来添加了ISO_WEEK(我认为是2008),因为在此期间的解决方法是编写自己的,缓慢的,糟糕的标量UDF – 实际上他们甚至创建了一个非常糟糕的并将其放入官方文档中(它已被删除为据我所知).

我不知道如何制作DATEPART(WEEK假装它是DATEPART(ISO_WEEK – 我认为你将不得不改变代码(如果你使用源代码控制,这应该不是很难 – 有多少地方是你执行这个计算吗?你有没有想过在某个地方计算它,所以你的代码不必充满它?因为你现在正在改变代码,这可能是考虑这个问题的时候了……).

如果你真的想要答案为什么?我认为你必须抓住一些原始的开发人员来确定他们选择认的原因.再次,我认为这不是一个真正的“标准!”选择,而是“什么标准?”

这里有一些信息可能有用:

https://stackoverflow.com/questions/348880/getting-week-number-off-a-date-in-ms-sql-server-2005

http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/iso-week-in-sql-server

原文地址:https://www.jb51.cc/mssql/80445.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐