我想在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
答案 0 :(得分:0)
您没有说出您正在使用的Sql Server版本。从2012年开始,您可以使用TRY_CONVERT函数,该函数接受与CONVERT相同的日期时间样式。然后,您可以尝试将输入转换为多种格式而不会出现任何错误 - 如果转换失败,您只需获得NULL。
在2012年之前的版本中,您可以创建自定义CLR functions并在.NET中执行此操作。它需要一些工作,但它仍然比通过mssql内置函数验证日期更好,因为不仅你必须确定格式,还要验证日期(30或31天)在一个月,闰年等)。在.NET中,它几乎是一个单行。