加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – ISO Week vs SQL Server Week

发布时间:2020-12-25 00:51:08 所属栏目:MsSql教程 来源:网络整理
导读:好的,所以我有一份报告本周和上周比较,我们的客户注意到他们的数据“很时髦”.经过进一步调查,我们发现根据ISO标准,它没有正确进行数周.我将此脚本作为测试用例运行. SET DATEFIRST 1SELECT DATEPART(WEEK,'3/26/13'),DATEPART(WEEK,'3/27/12'),'3/20/12'),'1

好的,所以我有一份报告本周和上周比较,我们的客户注意到他们的数据“很时髦”.经过进一步调查,我们发现根据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

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读