Я адаптирую некоторый код и нашел этот запрос:
SELECT <some columns>
FROM sample_table AS M
WHERE YEAR(@BETWEEN_DATE) * 365 + MONTH(@BETWEEN_DATE) * 30 + DAY(@BETWEEN_DATE)
BETWEEN (
YEAR(M.STARTINGDATE) * 365 + MONTH(M.STARTINGDATE) *
30 + DAY(M.STARTINGDATE)
)
AND
CASE
WHEN M.ENDINGDATE IS NULL THEN (
YEAR('99990101') * 365 + MONTH('99990101') * 30 + DAY('19000101')
)
ELSE (
YEAR(M.ENDINGDATE) * 365 + MONTH(M.ENDINGDATE)
* 30 + DAY(M.ENDINGDATE)
)
END
Из предыдущего запроса параметр @BETWEEN_DATE
преобразован в числа, но этот logi c слишком запутан для мне, честно.
EDIT : Тип данных параметра @BETWEEN_DATE
и столбцов M.STARTINGDATE
и M.ENDINGDATE
- DATETIME
.
Я могу представить, что @BETWEEN_DATE
преобразуется в число для проверки, находятся ли M.STARTINGDATE
и M.ENDINGDATE
между диапазоном. Эти даты начала и окончания используются таким образом для агрегирования года до значения в столбцах M.STARTINGDATE
и M.ENDINGDATE
; но; Я не совсем уверен.
Результат «в случае, если параметр @BETWEEN_DATE
равен 2020-06-18 00:00:00.000
», значения года, месяца и дня будут следующими:
DECLARE @BETWEEN_DATE DATETIME = CAST(GETDATE() AS DATE);
SELECT @BETWEEN_DATE AS FECHA, YEAR(@BETWEEN_DATE) * 365 + MONTH(@BETWEEN_DATE) * 30 + DAY(@BETWEEN_DATE) AS NUMERIC_RESULT,
YEAR(@BETWEEN_DATE) * 365 AS _YEAR,
MONTH(@BETWEEN_DATE) * 30 AS _MONTH,
DAY(@BETWEEN_DATE) AS _DAY;
Year: 737300
Month: 180
Day: 18
Я хочу изменить этот запрос и понять его, чтобы сделать его более разборчивым / простым для понимания.