AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 38680
Accepted
Zane
Zane
Asked: 2013-03-28 07:48:39 +0800 CST2013-03-28 07:48:39 +0800 CST 2013-03-28 07:48:39 +0800 CST

ISO 周与 SQL Server 周

  • 772

好的,所以我有一份报告进行了本周与上周的比较,我们的客户注意到他们的数据“时髦”。经过进一步调查,我们发现它没有按照 ISO 标准正确运行数周。我将此脚本作为测试用例运行。

SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
    , DATEPART(WEEK, '3/27/12')
    , DATEPART(WEEK, '3/20/12')
    , DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
    , DATEPART(ISO_WEEK, '3/27/12')
    , DATEPART(ISO_WEEK, '3/20/12')
    , DATEPART(ISO_WEEK, '1/2/12')

运行时我得到了这些结果。

结果集

我认为这很奇怪,所以我进行了更多挖掘,发现 SQL Server 将 1 月 1 日计为一年中的第一周,而 ISO 将 1 月的第一个星期日计为一年中的第一周。

然后问题最终变成了两个问题。问题1 为什么会这样?问题 2 有没有办法改变它,所以我不必修改我的所有代码以ISO_Week在任何地方使用?

sql-server sql-server-2008
  • 2 2 个回答
  • 54343 Views

2 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2013-03-28T07:59:06+08:002013-03-28T07:59:06+08:00

    当 SQL Server 首次实现WEEK日期/部分时,他们必须做出选择。我认为对此并没有太多的意识,除了要与当时最常见的标准保持一致 - 请记住,这是在符合标准不是首要任务的时候(否则我们不会有类似的事情timestamp,IDENTITY和TOP)。他们后来补充说ISO_WEEK(我相信是 2008 年),因为同时解决方法是编写自己的、缓慢的、蹩脚的标量 UDF - 事实上,他们甚至创建了一个非常糟糕的 UDF 并将其放入官方文档中(它已被删除据我所知)。

    我不知道如何DATEPART(WEEK假装它是DATEPART(ISO_WEEK- 我认为你将不得不更改代码(如果你使用源代码控制,这应该不是很难 - 你在多少地方执行这个计算?有你想过在某个地方计算它,这样你的代码就不必被它弄得千疮百孔了吗?既然你现在正在更改代码,这可能是考虑这个的时候了……)。

    如果你真的想知道为什么?我认为您必须抓住一些原始开发人员来确定他们为什么选择他们所做的默认设置。同样,我认为这不是真正的“F标准!” 选择,而是“什么标准?”

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

    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

    • 28
  2. Sedat GÖÇTÜ
    2014-10-29T01:30:36+08:002014-10-29T01:30:36+08:00

    有几个当局假设一年中第一周的条件不同。有些人假设一周的第一天从第一周开始,但最常见的想法是,第一个星期四的第一周是一年中的第一周。

    所以ISO_WEEK接受这一点,就像在 2010 年、2011 年或 2012 年一样,你可以检查ISO_WEEK说 1 月 1 日是第 52 周或第 53 周,而WEEK或WK或WW说它们是第一周。

    SELECT DATEPART (WW,'01/01/2010')   --> 1
    SELECT DATEPART (WK,'01/01/2010')   --> 1
    SELECT DATEPART (WEEK,'01/01/2010')   --> 1
    SELECT DATEPART (ISO_WEEK,'01/01/2010')   --> 53
    
    • 3

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve