验证t-sql中的日期?

use*_*329 3 sql t-sql sql-server

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

Declare @UserInput NVARCHAR(20)
set @UserInput = '26/07/2013'
select ISDATE(@UserInput)
Run Code Online (Sandbox Code Playgroud)

即使日期有效,这也将返回false,因为日期是澳大利亚格式

我可以将最后一行更改为以下内容

select isdate(CONVERT(datetime, @UserInput, 103))
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但是如果@Userinput是垃圾(即: - 'hello'),那么最后一个语句就会失败.我怎么能有一些东西,无论用户输入什么,它都会将其验证为澳大利亚日期(年/月/日)?

谢谢

Gar*_*thD 7

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

SET DATEFORMAT DMY;

Declare @UserInput NVARCHAR(20)
set @UserInput = '26/07/2013'
select ISDATE(@UserInput)
Run Code Online (Sandbox Code Playgroud)

在输入到达SQL-Server之前,我倾向于执行这样的验证,并确保任何日期变量都是日期.

  • @user2206329,来自 [SET 语句](http://technet.microsoft.com/en-us/library/ms190356.aspx) 的文档 - “Transact-SQL 编程语言提供了多个更改当前会话的 SET 语句具体信息的处理。” 所以当前会话就是范围。 (2认同)