1樓:姚妞釁和雅
(1)擷取第
七、八位數沒有錯
(2)錯就錯在as
datetime錯誤。
擷取獲得的兩位數字不可能轉成時間格式。只能轉成int、string或者varchar格式
(3)改正方法:把as
datetime改成as
int或者改成as
varchar
望採納!
2樓:興義焦亦綠
你截出來的是19810101,這個不能直接做時間處理,要單獨截1981,01,01,然後拼接成1981-01-01,才可以做資料型別轉換。
3樓:鮮雙樂冬蓮
select
a.身份證號,b.身份證號
from
新身份證表
a,舊身份證表
bwhere
substring(a.身份證號,1,6)=substring(b.身份證號,1,6)
andsubstring(a.身份證號,9,9)=substring(b.身份證號,7,9)
最後一個是驗證位,估計用不上吧?
上邊也有可能我數錯了,你改一下就好,知道substring的用法吧?
4樓:慶梧申爾雲
#include
"stdio.h"
void
main()
sum=sum+t[i];
}printf("前17位相乘後的和為%ld\n",sum);
m=sum%17;
printf("對17取餘後的值位:",m);
switch(m)
printf("\n");}
5樓:初雍冠從波
說明:1、用
(substring
(身份證號碼,
7,4)
+'-'
+substring
(身份證號碼,
11,2)
+'-'
+substring
(身份證號碼,
13,2)
)可以提取生日,不信你可以提一下自己的身份證測試2、批量提取的前提是:
(1)所有需要提取的身份證都是18位
(2)所有身份證的第11-12位不能大於12,例如『534517198513012241』這樣的身份證出現時,會導致你整個身份證提取報錯。因為你給出生日期列設定的是date格式,在sql裡面date格式是禁止出現13月的,超出了正常日期。
(3)同理可知,所有身份證的第13-14位不能大於31,例如『534517198512412241』這樣的身份證出現時,也會導致你整個身份證提取報錯。
sql 身份證號碼提取出生日期
6樓:賓士
15位身份證號碼和18位身份證號碼都是第7到第14位為生日資訊,這不是問題
update 表名 set birth=substring(idcard,7,14) where birth='1900-1-1';
---以上,希望對你有所幫助。
7樓:匿名使用者
if exists (select * from sysobjects where name='f_getbirth' and xtype='fn')
drop function f_getbirth
gocreate function f_getbirth (@card varchar(20))
returns datetime
asbegin
declare @year varchar(4),@month varchar(2),@day varchar(2),@len int,@birth datetime
select @len=len(@card)
if @len=18
begin
select @year=substring(@card,7,4)
select @month=substring(@card,11,2)
select @day=substring(@card,13,2)
endif @len=15
begin
select @year=substring(@card,7,2)
if cast(@year as int)>9
select @year='19'+@year
else
select @year='20'+@year
select @month=substring(@card,9,2)
select @day=substring(@card,11,2)
endselect @birth=cast(@year+'-'+@month+'-'+@day as datetime)
return @birth
endupdate 表 set birth=dbo.f_getbirth(idcard) where idcard is not null
我這個函式在15位的時候只是把年號大於09的當成20世紀的了,小於09的當成21世紀的了,不知道能不能滿足你的要求
以上,希望對你有所幫助!
8樓:匿名使用者
update 表 set birth=case datalength(idcard)
when 18 then substring(idcard,7,8)
when 15 then '19'+substring(idcard,7,6)--2023年以後的都18位
else null
end自己測試了一下,發現datalength()函式只適合單位元組字元,對於雙位元組字元則會翻倍,所以改用len()函式,並去掉前導空格,修改後如下:
update 表 set birth=case len(ltrim(idcard))
when 18 then substring(idcard,7,8)
when 15 then '19'+substring(idcard,7,6)--2023年以後的都18位
else nullend
9樓:匿名使用者
15位和18位有點不同,15位的提取出來的出身年月的年份不帶19或者20,也就是類似860122這樣的格式,18位的提取出來的出身年月是類似19860122這樣的格式
所以說提取的長度不同
最好是寫個儲存過程,先判斷出生年月欄位的資料的位數,再分別處理
10樓:無聊的乘乘
你用c++還是用vb?你的提問就像去茶樓買保險套,沒人能幫你~
sql 從身份證中自動獲取出生日期,顯示格式為***x-xx-xx
11樓:放飛新的人生
以oracle為例,通過substr()方法擷取年月日,即可。
**如下:
declare
cardid varchar(20);
birth varchar(20);
begin
/*給cardid賦值一個18位身份證號碼*/birth := substr(cardid,7,4) || '-' || substr(cardid,11,2) || '-' || substr(cardid,13,2);
dbms_output.put_line(birth);
end;
12樓:
select to_date(substr('123456199010171235',7,8),'yyyy-mm-dd') from dual;
13樓:匿名使用者
declare @card nvarchar(20),@result nvarchar(20)
set @card='310110190001011239'
set @card='310110801212123'
if len(@card)=18
begin
set @result=substring(@card,7,8)select substring(@result,1,4)+'-'+substring(@result,5,2)+'-'+substring(@result,7,2)
endif len(@card)=15
begin
set @result=substring(@card,7,6)select '19'+substring(@result,1,2)+'-'+substring(@result,3,2)+'-'+substring(@result,5,2)end
14樓:
sql server,18為身份證
substring(cardid,7,4) + '-' + substring(cardid,11,2) + '-' + substring(cardid,13,2)
15樓:匿名使用者
很容易的,仔細看看就行了
如何在資料庫中利用sql從18位身份證號中擷取出生日期,身份證號在reader表中
16樓:匿名使用者
sqlserver:
select substring(身份證號,7,8) from reader
oracle:
select substr(身份證號,7,8) from reader
17樓:匿名使用者
如果是以char格式儲存的話可以考慮使用substring函式,比如說substring(id,7,8)就是從第七個字元開始取8個字元。
sql中,根據身份證號碼擷取出了出生日期,怎麼獲取當前年齡,精確到月、日? 10
18樓:匿名使用者
具體**就不寫了
思路如下
身份證18位 從多少位是年月日來著?大概是第7--15是年月日 substring()方法
獲取當前年與日
兩個日期轉化為毫秒相減,相減後的毫秒轉化為天數
給個小例子
public static void main(string args) {
calendar nowdate=calendar.getinstance(),olddate=calendar.getinstance();
nowdate.settime(new date());//設定為當前系統時間
olddate.set(1990, 5, 19);//設定為2023年(6)月29日
long timenow=nowdate.gettimeinmillis();
long timeold=olddate.gettimeinmillis();
long 相隔天數=(timenow-timeold)/(1000*60*60*24);//化為天
system.out.println("相隔"+相隔天數+"天");
19樓:匿名使用者
瞭解到身份證編號的規則,其中8位表示出生年份以及月日,然後與當前系統時間進行日期比較。
利用sql自帶的日期函式,就可以了。相信你肯定很快就能搞定的。
sql語句:身份證提取出生日期後比較
20樓:成功世紀人生
30秒學會在word中提取身份證號中的出生日期,這是第一種方法,第二種方法更有效率和實用性。
21樓:
select * from [表名]
where birth<>substring(code,7,4)+'-'+substring(code,11,2)+'-'+substring(code,13,2)
22樓:傳說中的鷹王
select * from tb_name
where substring(code,7,8)<>convert(varchar(8),birth,112)
身份證掛失。。急,急!!!身份證丟失如何掛失
身份證是我們個人身份的很重要的一個憑證,涉及到我們個人的資訊保安,如果不小心遺失一定要儘快補辦,身份證丟了怎麼補辦?身份證如果掉了,是不需要去掛失的,只要持有效的證件,比如戶口本到當地的派出所去補辦就好了,現在異地也是可以補辦的,但是需要有當地的居住證才可以 中華人民共和國居民身份證法 第十一條規定...
如何辦理臨時身份證!急,如何辦理臨時身份證
很多小夥伴在需要身份證的時候會發現它不見了,如果急用的時候,我們就需要辦理臨時身份證。那麼怎麼辦理呢?只有回自己戶口所在地辦,如果回不去就只有找人幫忙給你辦了。回家到派出所才能開臨時身份證 如果有人的話也可以拿個人 怎麼補辦臨時身份證,需要什麼?如何辦理臨時身份證 居住在中華人民共和國境內的中國公民...
如何防止身份證消磁,怎樣防止身份證消磁?
避免強磁場。手機 銀行卡等物品一起塞在包裡,很容易造成銀行卡被 消磁 兩張銀行卡的磁條如果重疊在一起,也很有可能同時被消磁。女士提包的磁性暗釦 部分醫學檢查裝置如核磁共振儀也會造成銀行卡的磁化。銀行卡最好放在帶硬皮的錢夾裡,位置不能太貼近磁性包扣。千萬不要隨意扔在雜亂的包中,防止尖銳物品磨損 刮傷磁...