SQL - 关于将日期转换为数字并检查参数是否在范围内的说明

SQL - Explanation about converting date to numbers and checking if parameter is between the range

我正在调整一些代码,我发现了这个查询:

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参数被转换为数字,但是老实说,这个逻辑对我来说太混乱了。

EDIT: 参数 @BETWEEN_DATE 和列 M.STARTINGDATEM.ENDINGDATE 的数据类型是 DATETIME.


I can imagen that @BETWEEN_DATE is converted to number for validate if M.STARTINGDATE and M.ENDINGDATE are between the range. Those starting and ending dates are operated in that way for aggregate a year to the value in M.STARTINGDATE and M.ENDINGDATE columns; but; I'm not entirely sure.

结果"in the case there parameter @BETWEEN_DATE is 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

我想修改此查询并理解它以使其更 legible/simple 易于理解。

查询 returns table 的所有行,其中变量 @BETWEEN_DATE 的值介于 STARTINGDATEENDINGDATE 的日期部分之间, 但它以一种不必要的复杂方式做到这一点。
试试这个简化版本:

SELECT <some columns>
FROM sample_table
WHERE @BETWEEN_DATE >= CONVERT(DATE, STARTINGDATE) 
AND (ENDINGDATE IS NULL OR @BETWEEN_DATE <= CONVERT(DATE, M.ENDINGDATE))