Кварталы, описанные ниже:
APRIL - JUNE - Q1
JULY - SEPT - Q2
OCT - DEC - Q3
JAN - MARCH - Q4
Например:
Date = '2018-12-24' -- Where this date is under third quarter
Так должно быть [Получите весь квартал <квартал текущей даты] </p>
---------------------------
Quarters
---------------------------
01 Jul 2018 - 30 Sep 2018
01 Apr 2018 - 30 Jun 2018
---------------------------
Если
Date = '2019-01-24' -- Where this date is under fourth quarter
Ожидаемый результат:
---------------------------
Quarters
---------------------------
01 Oct 2018 - 30 Dec 2018
01 Jul 2018 - 30 Sep 2018
01 Apr 2018 - 30 Jun 2018
---------------------------
Запрос, который я пробовал:
DECLARE @dt DATETIME = '2019-01-24 18:15:59.517'
DECLARE @FirstDayOfQuarter DATETIME
DECLARE @LastDayOfQuarter DATETIME
SET @FirstDayOfQuarter = (SELECT Dateadd(qq, Datediff(qq, 0, @dt) - 1, 0))
SET @LastDayOfQuarter = (SELECT Dateadd(dd, -1, Dateadd(qq, Datediff(qq, 0, @dt)
, 0)))
DECLARE @year INT
SET @year = Datepart(year, @dt)
DECLARE @currQ NVARCHAR(max)
SET @currQ = (SELECT CONVERT(VARCHAR(20), @FirstDayOfQuarter, 106)
+ Space(1) + '-' + Space(1)
+ CONVERT(VARCHAR(20), @LastDayOfQuarter, 106))
SELECT CONVERT(NVARCHAR(20), Dateadd(m, 3*number, CONVERT(DATE, CONVERT(VARCHAR(
5),
@year)+'-1-1')), 106)
+ Space(1) + '-' + Space(1)
+ CONVERT(NVARCHAR(20), Dateadd(d, -1, Dateadd(m, 3*number+3, CONVERT(
DATE,
CONVERT(VARCHAR(5), @year)+'-1-1'))), 106) AS Quarter,
number,
CASE
WHEN @dt BETWEEN Dateadd(m, 3 * number, CONVERT(DATE, CONVERT(VARCHAR(5
),
@year) +
'-1-1')) AND
Dateadd(d, -1, Dateadd(m, 3 * number + 3,
CONVERT(DATE, CONVERT(VARCHAR(5)
,
@year
) + '-1-1'))) THEN 1
ELSE 0
END AS isCurrentQuarter
INTO #allquarters
FROM master..spt_values
WHERE type = 'p'
AND number BETWEEN 1 AND 4
SELECT TOP 1 number,
CASE
WHEN @dt BETWEEN Dateadd(m, 3 * number,
CONVERT(DATE, CONVERT(VARCHAR(5),
@year) +
'-1-1')) AND
Dateadd(d, -1, Dateadd(m, 3 * number + 3,
CONVERT(DATE, CONVERT(
VARCHAR(5),
@year
) + '-1-1'))) THEN 1
ELSE 0
END AS isCurrentQuarter
INTO #currentquarter
FROM master..spt_values
WHERE type = 'p'
AND number BETWEEN 1 AND 4
ORDER BY iscurrentquarter DESC,
number ASC
SELECT quarter
FROM #allquarters
WHERE number < (SELECT number
FROM #currentquarter)
ORDER BY number DESC
DROP TABLE #allquarters
DROP TABLE #currentquarter
Он работает для GETDATE()
, но когдаЯ ставлю дату как 2019-01-24 18:15:59.517
, тогда она дает мне пустой результат
РЕДАКТИРОВАТЬ:
Если
Date = '2019-05-24' -- Where this date is under first quarter of next year
Ожидаемый результат:
---------------------------
Quarters
---------------------------
01 Jan 2019 - 30 March 2019
01 Oct 2018 - 30 Dec 2018
01 Jul 2018 - 30 Sep 2018
01 Apr 2018 - 30 Jun 2018
---------------------------
Если
Date = '2018-05-24' -- Where this date is under the first quarter of current year
Ожидаемый результат:
---------------------------
Quarters
---------------------------
01 Jan 2018 - 30 March 2018
01 Oct 2017 - 30 Dec 2017
01 Jul 2017 - 30 Sep 2017
01 Apr 2017 - 30 Jun 2017
---------------------------