簡體   English   中英

SQL 查詢查找去年的日期等於今天的日期

[英]SQL query to find dates of last year equivalent to today's date

我正在編寫 SQL 查詢以查找與今天日期相同的去年的業務工作日期。

在此查詢中,它應該獲取:-

例如,如果今天是 2021 年 1 月 5 日,並且是一年中第二周的第二天。 所以我需要找到上一年第二周第二天的確切日期。 所以應該是 2020 年 1 月 7 日。

有了這個,我需要 2020 年 1 月 7 日(即不包括周六和周日)那一周的業務工作日期,根據示例,這將是 2020 年 1 月 6 日至 2020 年 1 月 10 日。

所以我需要 2020 年 1 月 6 日至 10 日之間的報告。

我正在嘗試使用此代碼查找與今天日期相同的去年日期(2021 年 1 月 5 日,即第二周的第二天)

select Convert(date, (DATEADD(year, -1, getdate()+2)));

根據 ISO 標准,2021-01-05 是 2021 年第一周的第二天。

如果您想要 2021 年第一周的第二天,那么它要么是今天的日期減去 52 周,要么是 53 周。 基於 ISO 日期的 Wikipedia 頁面:

[53 周年份是] 1 月 1 日或 12 月 31 日是星期四的年份

所以,我們希望在前一年做到這一點。 因此,我認為以下應該有效:

select dateadd(week,
               (case when 'Thursday' in (datename(weekday, datefromparts(year(getdate()) - 1, 1, 1)),
                                         datename(weekday, datefromparts(year(getdate()) - 1, 12, 31))
                                       )
                    then -53 else -52
               end),
               convert(date, getdate()) 
              )

請注意,這將返回 2019-12-31,這是基於 ISO 標准的正確值。

我已經使用多個CTE向您展示逐步計算。 應該很容易理解。

基本上它會找到2021-01-05week_noday_no_of_week ,然后使用它來找到2020的相同日期

declare @input_date     date = '2021-01-05',
        @year_offset    int  = -1;  -- previous year

with 
cte1 as
(
    select  input_date          = @input_date,
            week_no             = DATEPART(WEEK, @input_date),
            first_day_of_week   = DATEADD(WEEK, DATEDIFF(WEEK, 0, @input_date), 0)
),
cte2 as
(
    select  *,
            day_no_of_week = DATEDIFF(DAY, first_day_of_week, @input_date) + 1
    from    cte1 
),
cte3 as
(
    select  *,
            first_day_of_the_prev_year = DATEADD(YEAR, DATEDIFF(YEAR, 0, @input_date) + @year_offset, 0)
    from    cte2
),
cte4 as
(
    select  *,
            first_day_of_week_prev_year = DATEADD(WEEK, DATEDIFF(WEEK, 0, DATEADD(WEEK, week_no - 1, first_day_of_the_prev_year)), 0)
    from    cte3
)
select  *,
        DATEADD(DAY, day_no_of_week - 1, first_day_of_week_prev_year) as the_required_date
from    cte4

暫無
暫無

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

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