gpt4 book ai didi

sql-server - 获取 12 月 31 日的正确周数

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

在 SQL Server 中,我试图获取给定日期的周数(含年份),欧洲风格,所以我使用 DATEPARTISO_WEEK参数:

SELECT CAST(DATEPART(year, myDate) AS VARCHAR) + RIGHT('0' + CAST(DATEPART(ISO_WEEK, myDate) AS VARCHAR), 2);

这很好用,除了 2018 年 12 月 31 日,它是 2019 年的第一周,但由于我分别使用 DATEPART 表示年和周,这显然不能工作。以下是 myDate 为 31-12-2018 的示例:

SELECT CAST(DATEPART(year, '31-12-2018') AS VARCHAR) + RIGHT('0' + CAST(DATEPART(ISO_WEEK, '31-12-2018') AS VARCHAR), 2);

上述查询返回“201801”。

有没有办法简单地获取 2018 年 12 月 31 日的 201901,而不对该日期进行显式测试?

最佳答案

查看可能的重复引用并稍微整理一下:

declare @d datetime = '2018-12-31';
select cast(year(dateadd(day, 26 - datepart(ISO_WEEK, @d), @d)) as varchar(4)) + right(('0' + cast(datepart(ISO_WEEK, @d) as varchar(2))), 2)

结果为 201901

测试代码:

select cast(ds.d as date) as 'date', cast(year(dateadd(day, 26 - datepart(ISO_WEEK, ds.d), ds.d)) as varchar(4)) + right(('0' + cast(datepart(ISO_WEEK, ds.d) as varchar(2))), 2) as "IsoWeek"
from (
select dateadd(day, x.num, '2018-12-30') as d
from (
select h.num + d.num + s.num as num
from (
select 0 num union select 100 num union select 200 num union select 300 num
) h
cross join (
select 0 num union select 10 num union select 20 num union select 30 num
) d
cross join (
select 0 num union select 1 num union select 2 union select 3 num
) s
) x
) ds
order by ds.d

结果是:

date        IsoWeek2018-12-30  2018522018-12-31  2019012019-01-01  2019012019-01-02  2019012019-01-09  2019022019-01-10  2019022019-01-11  2019022019-01-12  2019022019-01-19  2019032019-01-20  2019032019-01-21  2019042019-01-22  2019042019-01-29  2019052019-01-30  2019052019-01-31  2019052019-02-01  2019052019-04-09  2019152019-04-10  2019152019-04-11  2019152019-04-12  2019152019-04-19  2019162019-04-20  2019162019-04-21  2019162019-04-22  2019172019-04-29  2019182019-04-30  2019182019-05-01  2019182019-05-02  2019182019-05-09  2019192019-05-10  2019192019-05-11  2019192019-05-12  2019192019-07-18  2019292019-07-19  2019292019-07-20  2019292019-07-21  2019292019-07-28  2019302019-07-29  2019312019-07-30  2019312019-07-31  2019312019-08-07  2019322019-08-08  2019322019-08-09  2019322019-08-10  2019322019-08-17  2019332019-08-18  2019332019-08-19  2019342019-08-20  2019342019-10-26  2019432019-10-27  2019432019-10-28  2019442019-10-29  2019442019-11-05  2019452019-11-06  2019452019-11-07  2019452019-11-08  2019452019-11-15  2019462019-11-16  2019462019-11-17  2019462019-11-18  2019472019-11-25  2019482019-11-26  2019482019-11-27  2019482019-11-28  201948

关于sql-server - 获取 12 月 31 日的正确周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54007743/

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