SQL Server判断日期是否为圣诞节或元旦的函数代码正确性咨询
代码正确性判断
你给出的日期判断逻辑核心是正确的,但存在可读性和后续维护的风险,具体说明如下:
- 基础逻辑没问题:你使用
MONTH()、DAY()函数提取date类型参数的月、日信息,匹配12月25日(圣诞节)、1月1日(元旦)的规则,在你约定的不考虑时区、日期格式的前提下,判断结果是准确的。 - 存在的隐患:SQL中
AND运算符的优先级高于OR,你当前的写法虽然执行结果正确,但逻辑边界不清晰,如果后续需要在判断条件中补充其他规则(比如限定年份范围),很容易出现逻辑错误。 - 优化后的代码建议:给两个日期的判断逻辑分别包裹括号,明确优先级:
DECLARE @paramDate date -- 其他业务逻辑 IF (MONTH(@paramDate) = 12 AND DAY(@paramDate) = 25) OR (MONTH(@paramDate) = 1 AND DAY(@paramDate) = 1) BEGIN -- 命中节日的处理逻辑 END
- 如果你需要封装成复用的函数,可以参考下面的标量函数实现:
CREATE FUNCTION dbo.IsChristmasOrNewYearDay (@CheckDate DATE) RETURNS BIT AS BEGIN RETURN CASE WHEN (MONTH(@CheckDate) = 12 AND DAY(@CheckDate) = 25) OR (MONTH(@CheckDate) = 1 AND DAY(@CheckDate) = 1) THEN 1 ELSE 0 END END
调用方式为SELECT dbo.IsChristmasOrNewYearDay('2024-01-01'),返回1表示命中节日,0表示未命中。
内容的提问来源于stack exchange,提问作者Dreamer
相关产品推荐
相关产品推荐

