T-SQL:检查日期在 Where 子句中的格式是否正确

T-SQL: Check if date is in proper format within Where-Clause

如何在 where 子句中检查是否设置了日期参数以及它的格式是否正确 (dd/mm/yyyy)。

这是我的 SP,参数 @birthdaysearch 格式为 (dd/mm/yyyy):

Select *
From Clients as c
WHERE
    CASE ISDATE(@birthdaysearch)
        WHEN 0 THEN (c.BirthDay LIKE '%')
        WHEN 1 THEN (c.BirthDay LIKE CONVERT(datetime,@birthdaysearch,103))
    END

为什么不起作用?

感谢您的帮助!

您的语法不正确:

Select *
From Clients as c
WHERE ISDATE(@birthdaysearch) = 0 OR 
      (ISDATE(@birthdaysearch) = 1 AND c.BirthDay LIKE CONVERT(datetime, @birthdaysearch, 103))

或:

Select *
From Clients as c
WHERE c.BirthDay LIKE CASE WHEN ISDATE(@birthdaysearch) = 0 THEN '%'                   
                           ELSE CONVERT(datetime, @birthdaysearch, 103) END

但是很奇怪为什么要用LIKE比较日期? 我向您推荐以下内容:

Select *
From Clients as c
WHERE c.BirthDay = CASE ISDATE(@birthdaysearch) WHEN 0 THEN c.BirthDay
                    ELSE CAST(@birthdaysearch AS DATE) END

鉴于评论中的对话,我认为以下内容是合适的:

Select *
From Clients as c
WHERE COALESCE(@BirthDaySearch, c.BirthDay) = c.BirthDay

因此,鉴于您的参数是日期时间类型并且可以为空,因此无需检查日期格式,因为它在到达存储过程时始终有效(或为空)。