SQL-关于将日期转换为数字以及检查参数是否在范围之间的说明

SQL-关于将日期转换为数字以及检查参数是否在范围之间的说明,sql,sql-server-2008,Sql,Sql Server 2008,我正在修改一些代码,我发现了以下查询: 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.STARTINGD

我正在修改一些代码,我发现了以下查询:

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\u DATE
的值介于
STARTINGDATE
ENDINGDATE
的日期部分之间,但它以不必要的复杂方式执行此操作。
请尝试此简化版本:

SELECT <some columns>
FROM sample_table
WHERE @BETWEEN_DATE >= CONVERT(DATE, STARTINGDATE) 
AND (ENDINGDATE IS NULL OR @BETWEEN_DATE <= CONVERT(DATE, M.ENDINGDATE))
选择
从样本表
其中@BETWEEN_DATE>=转换(日期,开始日期)

和(ENDINGDATE为NULL或@BETWEEN_DATE@BETWEEN_DATE的数据类型是什么?@forpas的STARTINGDATE和ENDINGDATE列都是
DATETIME
。问题已编辑
SELECT <some columns>
FROM sample_table
WHERE @BETWEEN_DATE >= CONVERT(DATE, STARTINGDATE) 
AND (ENDINGDATE IS NULL OR @BETWEEN_DATE <= CONVERT(DATE, M.ENDINGDATE))