15位sfzjh升级为18位

本文介绍了一种通过SQL更新语句将15位身份证号码升级为18位的方法,适用于不同出生年份的公民。该方法考虑了校验码的计算,并针对特殊年份进行了区分。

UPDATE retire_info1 SET sfzjh=
SUBSTRING(sfzjh,1,6)+'18'+SUBSTRING(sfzjh,7,9)+
SUBSTRING('10X98765432',
(
CAST(SUBSTRING(sfzjh, 1,1) AS INT)*7
+CAST(SUBSTRING(sfzjh, 2,1) AS INT)*9
+CAST(SUBSTRING(sfzjh, 3,1) AS INT)*10
+CAST(SUBSTRING(sfzjh, 4,1) AS INT)*5
+CAST(SUBSTRING(sfzjh, 5,1) AS INT)*8
+CAST(SUBSTRING(sfzjh, 6,1) AS INT)*4
+1*2
+8*1
+CAST(SUBSTRING(sfzjh, 7,1) AS INT)*6
+CAST(SUBSTRING(sfzjh, 8,1) AS INT)*3
+CAST(SUBSTRING(sfzjh, 9,1) AS INT)*7
+CAST(SUBSTRING(sfzjh,10,1) AS INT)*9
+CAST(SUBSTRING(sfzjh,11,1) AS INT)*10
+CAST(SUBSTRING(sfzjh,12,1) AS INT)*5
+CAST(SUBSTRING(sfzjh,13,1) AS INT)*8
+CAST(SUBSTRING(sfzjh,14,1) AS INT)*4
+CAST(SUBSTRING(sfzjh,15,1) AS INT)*2
)
% 11 + 1, 1)
WHERE LEN(sfzjh)=15 AND SUBSTRING(sfzjh,13,3) IN ('999','998','997','996')

-- 15位sfzjh升级为18位,适用于19xx年出生的公民
UPDATE retire_info1 SET sfzjh=
SUBSTRING(sfzjh,1,6)+'19'+SUBSTRING(sfzjh,7,9)+
SUBSTRING('10X98765432',
(
CAST(SUBSTRING(sfzjh, 1,1) AS INT)*7
+CAST(SUBSTRING(sfzjh, 2,1) AS INT)*9
+CAST(SUBSTRING(sfzjh, 3,1) AS INT)*10
+CAST(SUBSTRING(sfzjh, 4,1) AS INT)*5
+CAST(SUBSTRING(sfzjh, 5,1) AS INT)*8
+CAST(SUBSTRING(sfzjh, 6,1) AS INT)*4
+1*2
+9*1
+CAST(SUBSTRING(sfzjh, 7,1) AS INT)*6
+CAST(SUBSTRING(sfzjh, 8,1) AS INT)*3
+CAST(SUBSTRING(sfzjh, 9,1) AS INT)*7
+CAST(SUBSTRING(sfzjh,10,1) AS INT)*9
+CAST(SUBSTRING(sfzjh,11,1) AS INT)*10
+CAST(SUBSTRING(sfzjh,12,1) AS INT)*5
+CAST(SUBSTRING(sfzjh,13,1) AS INT)*8
+CAST(SUBSTRING(sfzjh,14,1) AS INT)*4
+CAST(SUBSTRING(sfzjh,15,1) AS INT)*2
)
% 11 + 1, 1)
WHERE LEN(sfzjh)=15 AND SUBSTRING(sfzjh,13,3) NOT IN ('999','998','997','996')

TRUNCATE TABLE FDM.fdm_jg_fydkjl; INSERT INTO FDM.fdm_jg_fydkjl ( gh, -- 工号 xm, -- 姓名 dwh, -- 单号 dwmc, -- 单名称 fbdkrwsj, -- 发布打卡任务时间 wcdksj, -- 完成打卡时间 dkdd, -- 打卡地点 sfqj, -- 是否请假 sfyxdk, -- 是否有效打卡 xb, -- 性别 lxdh, -- 联系电话 hsqksm, -- 核算情况说明 sfzjh, -- 身份证件号 jzdz -- 居住地址 ) SELECT t2.gh, --工号 t11.xm, --姓名 t11.dwh, -- 单号 t11.dwmc, -- 单名称 CAST(NULL AS TIMESTAMP) AS fbdkrwsj, -- 发布打卡任务时间 t2.dksj AS wcdksj, -- 完成打卡时间 NULL AS dkdd, -- 打卡地点 NULL AS sfqj, -- 是否请假 '1' AS sfyxdk, -- 是否有效打卡 CAST(t4.xb AS VARCHAR), --性别 CAST(t7.lxdh AS VARCHAR), -- 联系电话 CAST(t8.hsqksm AS VARCHAR) AS hsqksm, -- 核算情况说明 CAST(t9.sfz AS VARCHAR) AS sfzjh, --身份证件号 CAST(t10.jzdz AS VARCHAR) AS jzdz --居住地址 FROM ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS bjmc, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'bjmc' )t2 LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS xm, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'username' ) t3 ON t2.gh = t3.gh AND t2.dksj = t3.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS xb, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'xb' ) t4 ON t2.gh = t4.gh AND t2.dksj = t4.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS bjmc, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'bjmc' ) t5 ON t2.gh = t5.gh AND t2.dksj = t5.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS bmmc, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'bmmc' ) t6 ON t2.gh = t6.gh AND t2.dksj = t6.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, CAST(t1.answer AS VARCHAR) AS lxdh, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'bdsjh' ) t7 ON t2.gh = t7.gh AND t2.dksj = t7.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS hsqksm, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'radio' ) t8 ON t2.gh = t8.gh AND t2.dksj = t8.dksj LEFT JOIN ( SELECT DISTINCT(t1.user_id) AS gh, t1.answer AS sfz, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'sfz' ) t9 ON t2.gh = t9.gh AND t2.dksj = t9.dksj LEFT JOIN ( SELECT t1.user_id AS gh, t1.answer AS jzdz, t1.answer_time AS dksj FROM ODS.ODS_YDXY_LYYD3_B_GRADUATE_ANSWER t1 WHERE t1.type = 'address' ) t10 ON t2.gh = t10.gh AND t2.dksj = t10.dksj LEFT JOIN FDM.fdm_jg_jbxx t11 ON t2.gh = t11.gh WHERE t2.gh = t11.gh
02-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值