我需要根據運行日期從 SQL Server 獲取如下所示的表(運行日期是系統日期 - 今天 01/08/2022):
| 開始日期 | 結束日期 | 25美分硬幣 |
|---|---|---|
| 2021 年 10 月 1 日 | 2021 年 12 月 31 日 | 2021Q4 |
uj5u.com熱心網友回復:
也許這會有所幫助。但是,Aaron 建議使用日歷表是 100% 正確的。
Select *
,[Quarter] = datename(year,StartDate) 'Q' datename(quarter,StartDate)
From (values (dateadd(QUARTER, datediff(QUARTER, 0, getdate()) - 1, 0)
,dateadd(DAY, -1, dateadd(QUARTER, datediff(QUARTER, 0, getdate()), 0)))
)A(StartDate,EndDate)
結果
StartDate EndDate Quarter
2021-10-01 2021-12-31 2021Q4
uj5u.com熱心網友回復:
從任何日期獲取上一季度:
DECLARE @d date = GETDATE();
-- let's create our own variable, "target date"
-- to move to the previous quarter first:
DECLARE @t date = DATEADD(MONTH, -3, @d);
;WITH p AS -- I like to use CTEs to avoid repeating expressions
(
-- grab year and quarter from 3 months before @d:
SELECT y = YEAR(@t), q = DATEPART(QUARTER, @t)
),
qs AS
(
-- now grab the starting day from the quarter:
SELECT y, q, s = DATEFROMPARTS(y, q*3-2, 1) FROM p
)
SELECT [Start date] = s,
[End date] = EOMONTH(s, 2),
[Quarter] = CONCAT(y,'Q',q)
FROM qs;
輸出:
| 開始日期 | 結束日期 | 25美分硬幣 |
|---|---|---|
| 2021-10-01 | 2021-12-31 | 2021Q4 |
- 示例db<>fiddle
或者,如果您喜歡更簡單(或不喜歡 CTE):
DECLARE @d date = GETDATE();
DECLARE @t date = DATEADD(QUARTER, -1, @d);
DECLARE @q tinyint = DATEPART(QUARTER, @t);
SELECT [Start date] = s,
[End date] = EOMONTH(s, 2),
[Quarter] = CONCAT(y, 'Q', @q)
FROM
(
SELECT YEAR(@t),
DATEFROMPARTS(YEAR(@t), @q*3-2, 1)
) AS QuarterParts(y, s);
- 示例db<>fiddle
在任何日期嘗試任一解決方案。
如果您需要從一組日期中獲取資訊:
DECLARE @dates table(TheDate date);
INSERT @dates(TheDate) VALUES
(GETDATE()),('20220101'),('20211230'),('20210902'),('20210831');
SELECT OriginalDate = d.TheDate,
PreviousQuarterStart = s,
PreviousQuarterEnd = EOMONTH(s, 2),
[Quarter] = CONCAT(YEAR(s), 'Q', q)
FROM
(
SELECT TheDate, PrevQ = DATEADD(QUARTER, -1, TheDate)
FROM @dates
) AS d
CROSS APPLY
(
VALUES
(
DATEPART(QUARTER, PrevQ),
DATEFROMPARTS(YEAR(PrevQ), DATEPART(QUARTER, PrevQ)*3-2, 1)
)
) AS q(q, s);
輸出:
| 原始日期 | 上一季度開始 | 上一季末 | 25美分硬幣 |
|---|---|---|---|
| 2022-01-08 | 2021-10-01 | 2021-12-31 | 2021Q4 |
| 2022-01-01 | 2021-10-01 | 2021-12-31 | 2021Q4 |
| 2021-12-30 | 2021-07-01 | 2021-09-30 | 2021Q3 |
| 2021-09-02 | 2021-04-01 | 2021-06-30 | 2021Q2 |
| 2021-08-31 | 2021-04-01 | 2021-06-30 | 2021Q2 |
- 示例db<>fiddle
但實際上更好的答案是創建一個日歷表并填充一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406354.html
標籤:
下一篇:在插入(SQL)中使用相同的值
