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