如何检查输入日期是否为特定格式 - SQL SERVER

时间:2015-04-20 10:39:16

标签: sql-server date datetime

我想在Sql Server中检查输入日期是否为特定格式。我无法使用ISDATE函数,因为dateformat MDY不支持某些格式,如103(dd / mm / yyyy),104(dd.mm.yyyy),105(dd-mm-yyyy)。

如果我尝试转换,例如,' 16/09 / 2015'像这样 转换(日期时间,' 16/09/2015' 103) 我得到演员阵容,但很明显,如果我尝试转换像' 16 / 0c / 2015'我得到了一个例外。

所以我想在WHERE条件中插入一个可以防止投射无效日期的检查。

我想创建一个特定的功能可以执行这项工作。我尝试在这样的条件下插入我的函数案例:

 case 
        when @format in (103,104,105) then set language british 
 end
 isdate(@string)

或者像这样

 declare @result varchar(30)
 begin try
        SELECT @result = CONVERT(datetime,@string,@format)
        SET @ret = 1
        RETURN
    end try
    begin catch
        SET @ret = 0
        RETURN
    end catch;

但在函数内部我不能插入try-catch或设置语言语句。

你能帮助我吗?

由于

的Fabio

1 个答案:

答案 0 :(得分:0)

您没有说出您正在使用的Sql Server版本。从2012年开始,您可以使用TRY_CONVERT函数,该函数接受与CONVERT相同的日期时间样式。然后,您可以尝试将输入转换为多种格式而不会出现任何错误 - 如果转换失败,您只需获得NULL。

在2012年之前的版本中,您可以创建自定义CLR functions并在.NET中执行此操作。它需要一些工作,但它仍然比通过mssql内置函数验证日期更好,因为不仅你必须确定格式,还要验证日期(30或31天)在一个月,闰年等)。在.NET中,它几乎是一个单行。