今天碰到的問題,人口庫,與需要比對庫的身份證號碼都存在這樣的問題:
記錄裡面有些記錄身份證號碼15位,有些是18位的。
這給比對帶來了麻煩,最好的辦法就是更新成為統一的,因為15變18可能是人工填寫,容易錯,最好都改成15位的。
我不想通過update統一修改庫里的資料,這是自己給自己找的麻煩,怎麼弄呢。
sql畢竟不是程式語言,所以不能在where子句裡進行——是否15位不是改成15,再判斷——這樣的法子。最後找了乙個折中的辦法。
先比對需要對比庫的表裡15的,再比對它裡面的18位的。人口庫通過in(select case when)的方式統一改成15 位。
select
*from
(select dbo.[sheet].
*from dbo.[sheet]
where
len(dbo.[sheet].[身份證號碼])
>
15and
(left(dbo.[sheet].[身份證號碼],6)
+substring(dbo.[sheet].[身份證號碼],9,
9))
in(select
case
when
len([col007])
>
15then
(left([col007],6)
+substring([col007],9,
9))else
[col007]
end
as身份證號碼
from dbo.[
2009-04
-21])
union
select dbo.[sheet].
*from dbo.[sheet]
where
len(dbo.[sheet].[身份證號碼])=15
and
dbo.[sheet].[身份證號碼]
in(select
case
when
len([col007])
>
15then
(left([col007],6)
+substring([col007],9,
9))else
[col007]
end
as身份證號碼
from dbo.[
2009-04
-21])
)ast效果還行,就是速度不是很快,2w在30w裡比對,3秒不知道算不算慢。
身份證號的檢測
ddddddyyyymmddxxsp共18位 公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為 六位數字位址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。2 位址碼 表示編碼物件常住戶口所在縣 市 旗 區 的行政區劃 按gb t2260的規定執行。3 出...
身份證號的驗證處理
問題1 如何判斷身份證號 正規表示式為 d d d d x x layui框架的表單驗證,框內需要保持一致。問題2 輸入的身份證號如果有x,輸入小寫,自動轉為大寫 css有乙個屬性text transform 給input繫結乙個class,新增樣式 輸入小寫x,自動轉為大寫,效果如圖 問題3 登陸...
15位身份證號的校驗
驗證15位身份證的合法性,該方法驗證不準確,最好是將15轉為18位後再判斷,該類中已提供。param idcard return public boolean isvalidate15idcard string idcard 是否全都為數字 if isdigital idcard if flag 該...