在t-sql中验证日期?

在t-sql中验证日期?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我只想验证来自用户的给定输入 Declare @UserInput NVARCHAR(20) set @UserInput = '26/07/2013' select ISDATE(@UserInput) 这将返回false,因为该日期为澳大利亚格式,即使该日期有效 我可以把最后一行改成下面这行 select isdate(CONVERT(datetime, @UserInput, 103)) 它是有效的。但是如果@Userinput是垃圾(即:-“hello”),那么最后一条语句将失败。我

我只想验证来自用户的给定输入

Declare @UserInput NVARCHAR(20)
set @UserInput = '26/07/2013'
select ISDATE(@UserInput)
这将返回false,因为该日期为澳大利亚格式,即使该日期有效

我可以把最后一行改成下面这行

select isdate(CONVERT(datetime, @UserInput, 103))
它是有效的。但是如果@Userinput是垃圾(即:-“hello”),那么最后一条语句将失败。我怎么能有这样的东西,不管用户输入什么,它都会验证到澳大利亚日期(dd/mm/yyyy)


谢谢

假设您使用的是SQL Server 2012及更高版本,您可以使用:

选择isdate(尝试转换(datetime,@UserInput,103))

使用指定希望输入日期的格式:

SET DATEFORMAT DMY;

Declare @UserInput NVARCHAR(20)
set @UserInput = '26/07/2013'
select ISDATE(@UserInput)

我倾向于在输入到达SQL Server之前执行此类验证,并确保任何日期变量都是日期。

我认为此类验证应该在调用应用程序中进行,不在查询文本中。请记住,任何数量的验证都无法避免日期不明确的情况-如果您刚刚收到
04/09/2013
,您将无法知道用户计划的日期是4月还是9月。为什么要进行ISDATE检查。。。只需检查TRY\u CONVERT是否返回NULL?@ta.speot.除了最初使用的OP
IsDate()
之外,没有其他原因,因此我假设他们想要的结果是真/假。但是可以,他们只需检查
Try\u Convert
。使用set DateFormat是否会更改sql安装的DateFormat?或者它仅对当前脚本有效?@user2206329取自链接的aticle-
,它不影响存储在数据库中的日期数据类型值的显示,也不影响存储格式
@user2206329,该格式来自以下文件——“Transact-SQL编程语言提供了几个SET语句,用于更改特定信息的当前会话处理。”因此,当前会话就是作用域。