gpt4 book ai didi

sql-server - SQL 服务器上的 yearweek

转载 作者:行者123 更新时间:2023-12-02 01:54:12 25 4
gpt4 key购买 nike

如何使用 T-SQL 从 SQL Server 中的日期中提取年和周组合并使其与 MySQL yearweek 匹配结果?

例如这些 MySQL 查询 ( Click here for MySQL SQL Fiddle ):

SELECT yearweek('2013-12-31');
SELECT yearweek('2014-01-01');

这将返回 201352两个日期。这就是预期的结果。

但是在 SQL Server 中...
  • datepart 对年份提取按预期工作
  • 有时 datepart 不会返回 iso_week 的预期值

  • 使用此 T-SQL 查询无法获得 MySQL 结果...
    SELECT datepart(year, @dt) * 100 + datepart (iso_week, @dt);

    以上 MySQL 查询的 T-SQL 版本 (Click here for T-SQL SQL Fiddle) :
    SELECT datepart(year, '2013-12-31') * 100 + datepart (iso_week, '2013-12-31');
    SELECT datepart(year, '2014-01-01') * 100 + datepart (iso_week, '2014-01-01');

    结果是 201352第一次约会和 201401第二次约会。

    然而,这不是预期的结果,因为......
  • 2014-01-01 属于最后 2013年一周
  • 所以预期的结果是 201352

  • 你们有没有更有经验的 T-SQL 开发人员知道如何提取给定日期的年/周并让这个匹配我在 MySQL 中看到的?

    我需要在星期一开始这一周。这就是我使用 iso_week 的原因.我已经用 week 测试了结果无论如何,发现了同样的问题。这个查询也会产生 201401201352是期待。
    SELECT datepart(year, '2014-01-01') * 100 + datepart (week, '2014-01-01');

    最佳答案

    如果您查看 http://msdn.microsoft.com/en-us/library/ms174420.aspx 处的 ISO_Week 日期部分定义,您将看到以下内容:

    ISO 8601 includes the ISO week-date system, a numbering system for weeks. Each week is associated with the year in which Thursday occurs...

    The numbering system in different countries/regions might not comply with the ISO standard.



    由于2014年1月1日是星期三; 2014 年 1 月 2 日是一年中的第一个星期四,因此是 2014 年的第 1 周(根据 ISO 8601)。

    此外,查看 yearweek 的 MySQL 定义和 week , 有多种模式选项 ( http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week )

    所以,我认为您将不得不自己编写 yearweek您想要的周计数规则的功能:
    CREATE FUNCTION dbo.yearweek(@date date)
    RETURNS INT
    as
    begin
    set @date = dateadd(dd,-datepart(dw,@date)+1, @date)

    return datepart(year,@date)*100 + datepart(week,@date)
    end
    go

    select dbo.yearweek('2013-12-31'), dbo.yearweek('2014-01-01')

    注意:我还没有完全测试过这段代码,我不确定你的要求是什么。这只是作为您需要遵循的流程类型的示例。

    关于sql-server - SQL 服务器上的 yearweek,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21096694/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com