簡體   English   中英

從 SQL 中的周數和年份獲取周開始日期

[英]Get Week Start Date from Week Number and Year in SQL

我有一個周數和年份,並希望周的第一天,從星期一開始。

我也想了一周排除如果本周開始日期為上年日期,例如,2018年12月31日在同一周下降為2019年1月1日,所以在這種情況下,我想從1月7日一周開始日期(星期一),2019年2019年。

目前,我想這個SQL代碼從周一獲得周開學日期

DECLARE @y NVARCHAR(100) = '2019', 
        @w INT = 1;

SELECT 
  [WeekStartDate] = DATEADD(wk,DATEDIFF(wk,7,@y) + (@w),7);

  --2019-01-07 00:00:00.000 -- returns this date which is correct.

我得到正確的周開始日期,直到2022年,但是當我嘗試了2023年2024出問題。 我想為一年= 2023和周= 1,從“2023年1月2日”(星期一)開始的一周開始日期和年份2024和周= 1,從“2024年1月1日”(星期一)開始,所以對今后幾年,但我得到如圖所示,並說明如下不同的結果。

  DECLARE @y NVARCHAR(100) = '2023', 
        @w INT = 1;

SELECT 
  [WeekStartDate] = DATEADD(wk,DATEDIFF(wk,7,@y) + (@w),7);

  --2023-01-09 00:00:00.000 - returns this date which is incorrect 
  --2023-01-02 00:00:00.000 - I want this date to be Week Start Date, not 2023-01-09
    

DECLARE @y NVARCHAR(100) = '2024', 
        @w INT = 1;

SELECT 
  [WeekStartDate] = DATEADD(wk,DATEDIFF(wk,7,@y) + (@w),7);

  --2024-01-08 00:00:00.000, - returns this date which is incorrect
  --2024-01-01 00:00:00.000 - I want this date to be Week Start Date, not 2024-01-08

任何快速幫助得到這個工作對於2023年,2024,和其他這樣的情況下,使其在所有相一致的年?

任何幫助都非常感謝。 先感謝您。

我想,你就可以完成你的日期轉換為它的周偏移量,然后轉換回一個日期查找的內容。 到本周的轉換取決於起始日期的星期。

2019年

declare 
  @yr           int=2019;
declare
  @dt           date=datefromparts(@yr, 1, 1),
  @sys_wk       int,
  @dt_from_wk   date;

select @sys_wk=datediff(wk, 0, @dt);
select cast(dateadd(wk, @sys_wk+1, 0) as date) yr_wk_start;

結果

yr_wk_start
2019-01-07

對於2023

declare 
  @yr           int=2023;
declare
  @dt           date=datefromparts(@yr, 1, 1),
  @sys_wk       int,
  @dt_from_wk   date;

select @sys_wk=datediff(wk, 0, @dt);
select cast(dateadd(wk, @sys_wk+1, 0) as date) yr_wk_start;

結果

yr_wk_start
2023-01-09

它適用於2024,以及...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM