『壹』 如何用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
『貳』 SQL資料庫約束身份證只能輸入15或者18位
createtable身份證
(身份證號varchar(18)check(len(身份證號)in(15,18)))
用以下幾個語句你驗證下就可以了
insertinto身份證values('123456789012345')
insertinto身份證values('123456789012345678')
insertinto身份證values('1234567890')
『叄』 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 中身份證編碼與出生日期驗證
根據身份證號驗證出生日期:
alter table 你的表--修改表
/*添加約束 要麼刪掉你之前的生日約束 要麼把
約束開始到結束復制到你的約束里再改*/
add constraint CK_生日 check(
--約束開始
convert(datetime,replace(stuff(stuff(right (left(char之類類型的18位的身份證號,14),8),5,0,'-'),8,0,'-'),'0',''))=生日欄位
--約束結束
)
最後只要把中文替換掉就可以了
『伍』 用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查詢 身份證判斷男女
上面給的答案是錯的,這個語句在身份證15位是可以用的,但是二代身份證是執行不下去的,正確的是:SELECT case when (left(right([買受人身份證號碼],2),1) % 2 = 0) then '女' else '男' end AS 性別1 from [表名]
若果是更新已有性別欄位,但是需要從身份證中提取男女的,用下面sql語句:
update [表名] set [性別]=(case when (left(right([買受人身份證號碼],2),1) % 2 = 0) then '女' else '男' end )
where len([身份證])=18 and left(right([身份證],2),1)<>'X'
注意後面的判別條件<>'X'針對的可能是錯誤的18位身份證號嗎需要剔除,否則執行不下去。
『柒』 sql中判斷身份證號碼的出生年月是否正確合法
好辦呀 oracle-sql
select substr(身份證號,7,8) from al;
這樣取出的就是出生年月日了
『捌』 sql 根據15位或18位身份證號返回出生日期,如果日期不合法,顯示"錯誤的身份證
15位的身份證是7-12位為日期 900124 就是1990 01 24
18位的身份證是7-14位為日期 19900124
身份證號碼 Declare @No varchar(30)
select case when len(@No)=15 then '19'+substring(@No,7,6) when len(@No)=18 then substring(@No,7,8) end