日期:2014-05-17  浏览次数:20510 次

在标量值函数中如何检测出一个字符串能否转换成日期
写一个标量值函数可以检查传入的字符串能否转换成日期类型

参数1: @年=‘2012’
参数2: @日期='8-1 12:0'

把两年字符串拼接在一起 cast(@年+@日期 as datetime) 这样直接转换在参数2正确的情况下可以成功转换,因客户的数据中@日期 经常有错的如 '13-1 1:2' 或 '8-1 70:90' 这样, 此时再用上面的方面就出转换出错了。

什么办法可以解决这种出错的, 出错了可以直接返回空值就可以, 转换成功时就返回成功的字符串

------解决方案--------------------
SQL code

create function fn_isdate
(
    @年 varchar(10),
    @日期 varchar(20)
)
returns varchar(30)
as
begin
    if(isdate(@年+'-'+@日期)=1)
        return convert(varchar(30),cast(@年+'-'+@日期 as datetime),120)
    else
        return null

    return ''
end


select dbo.fn_isdate('2012','8-1 12:0')
/*
2012-08-01 12:00:00
*/
select dbo.fn_isdate('2011','13-1 1:2')
select dbo.fn_isdate('2012','8-1 70:90')
/*
NULL
*/