㈠ 我要用sql语句为用约束或规则保证身份证号码为18位,怎么实现啊
在create table的时候,加上约束。这样子在 往这个表插入数据的时候,就会验证,如果不是18位,是会报错的。
CREATE TABLE test(
pid VARCHAR2(18) check (length(PID) = 18)
)
㈡ sql 语句 验证身份证号码
帮你搜了一下,参考参考。
主要验证SQL数据库中已输入的15位 及18位 身份证号码的位数、出生年月日是否正确,
可以过滤出大部分的输入错误。
or (len(身份证号)=18 and (Substring(身份证号,7,2)<'19' or Substring(身份证号,7,2)>'20'
or (Substring(身份证号,11,2)>12)
or (Substring(身份证号,11,2) in (01,03,05,07,08,10,12) and Substring(身份证号,13,2)>31)
or (Substring(身份证号,11,2) in (04,06,09,11) and Substring(身份证号,13,2)>30)
or (Substring(身份证号,11,2)=02 and Substring(身份证号,13,2)>29)))
---------------------- 下面是针对 15位 及18位 身份证号码性别的验证语句 ------------------
-- Access 不支持 Substring 查询,可以替换为 mid 查询。
select 序号,姓名,身份证号,性别
from 身份表
where (((len(身份证号)=15) and (Substring(身份证号,15,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=15) and (Substring(身份证号,15,1) in (2,4,6,8,0)) and 性别<>'女'))
or (((len(身份证号)=18) and (Substring(身份证号,17,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=18) and (Substring(身份证号,17,1) in (2,4,6,8,0)) and 性别<>'女'))
---------------------- 下面是针对 15位 及18位 身份证号码位数与出生年月日的验证 ------------------
-- Access 不支持 Substring 查询,可以替换为 mid 查询。
select 序号,姓名,身份证号,性别
from 身份表
where (len(身份证号)<>15 and len(身份证号)<>18)
or (len(身份证号)=15 and ((Substring(身份证号,9,2)>12)
or (Substring(身份证号,11,2) > 31)
or (Substring(身份证号,9,2) in (01,03,05,07,08,10,12) and Substring(身份证号,11,2)>31)
or (Substring(身份证号,9,2) in (04,06,09,11) and Substring(身份证号,11,2)>30)
or (Substring(身份证号,9,2)=02 and Substring(身份证号,11,2)>29)))
㈢ sql 查询语句,关于某个字段位数判断。
1、首先我们准备一个数据表。
㈣ 用SQL函数判断是否有效18位身份证号
判断是不是18位
if (len(@snid)<> 18) or (isnull(@snid,'')='')
goto ext
第七位、第八位不是19 或者 20
if not ((substring(@snid,7,2)='19') or (substring(@snid,7,2)='20'))
goto ext
判断前17位是否都是数字
select @i=1,@id_num='',@sn_sum=0,@sn_Last=''
while @i<18
begin
㈤ 如何用SQL语言写一个触发器,实现身份证号码位数的判断。
CREATE TRIGGER mod_test ON dbo.tablename
FOR UPDATE
AS
declare @errno int, @errmsg varchar(255)
if (select len(身份证) from inserted) not in (0,18)
begin
select @errno = 50001, @errmsg = '身份证号码不等于18位,请检查!! '
goto error
end
return
error:
raiserror @errno @errmsg
rollback transaction