SQL中判断身份证对与否?
来源:百度知道 编辑:UC知道 时间:2024/07/05 15:03:32
select * from sb03 where (case when len(gr02) =18 then isdate(substring(gr02,7,8))
when len(gr02)=15 then isdate('19'+substring(gr02,7,6))
end )=1
用了不正确,我的版本应该用length 和substr,并且isdate没这个函数
现在的问题是我的数据库中身份证的字段有18位和有15位的,并且有的不合法的,怎么提取出数据判断是否是正确的时间格式?
when len(gr02)=15 then isdate('19'+substring(gr02,7,6))
end )=1
用了不正确,我的版本应该用length 和substr,并且isdate没这个函数
现在的问题是我的数据库中身份证的字段有18位和有15位的,并且有的不合法的,怎么提取出数据判断是否是正确的时间格式?
我曾写过完整的身份证校验过程,
但是是VB的和VB.net的,如果你要可能给你,如果你要SQL的,我就翻译一下.
下面只校验日期
函数如下
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE FUNCTION CheckSNID ( @snid nvarchar(20))
RETURNS bit AS
BEGIN
declare @b bit
set @b = 0
if len(@snid)<>15 and len(@snid)<>18
goto ext
if len(@snid)=15
set @snid = left(@snid,6) + '19'+ right(@snid,9)
declare @y nvarchar(4),@m nvarchar(2) ,@d nvarchar(2)
set @y = substring(@snid,7,4)
set @m = substring(@snid,11,2)
set @d = substring(@snid,13,2)
declare @x nvarchar(10)
set @x = @y +'-'+@m+'-'+@d
if isdate(@x) =1
set @b=1
ext:
return @b
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
select * from sb03 where dbo.CheckSNID (gr02) =1