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))