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位的,并且有的不合法的,怎么提取出数据判断是否是正确的时间格式?

我曾写过完整的身份证校验过程,
但是是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