3

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

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

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

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

select isdate(CONVERT(datetime, @UserInput, 103))

它有效。但是如果@Userinput 是垃圾(即:-'hello'),那么最后一个语句将失败。我怎么能拥有一些东西,无论用户输入什么,它都会将其验证为澳大利亚日期(dd/mm/yyyy)?

谢谢

4

2 回答 2

7

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

SET DATEFORMAT DMY;

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

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

于 2013-09-30T12:34:32.117 回答
3

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

select isdate(TRY_CONVERT(datetime, @UserInput, 103))

于 2013-09-30T12:34:12.820 回答