sqlserver如何將身份證號碼的出生日期提取出來轉為日期型別資料

2022-01-01 17:44:06 字數 5963 閱讀 3863

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)

身份證掛失。。急,急!!!身份證丟失如何掛失

身份證是我們個人身份的很重要的一個憑證,涉及到我們個人的資訊保安,如果不小心遺失一定要儘快補辦,身份證丟了怎麼補辦?身份證如果掉了,是不需要去掛失的,只要持有效的證件,比如戶口本到當地的派出所去補辦就好了,現在異地也是可以補辦的,但是需要有當地的居住證才可以 中華人民共和國居民身份證法 第十一條規定...

如何辦理臨時身份證!急,如何辦理臨時身份證

很多小夥伴在需要身份證的時候會發現它不見了,如果急用的時候,我們就需要辦理臨時身份證。那麼怎麼辦理呢?只有回自己戶口所在地辦,如果回不去就只有找人幫忙給你辦了。回家到派出所才能開臨時身份證 如果有人的話也可以拿個人 怎麼補辦臨時身份證,需要什麼?如何辦理臨時身份證 居住在中華人民共和國境內的中國公民...

如何防止身份證消磁,怎樣防止身份證消磁?

避免強磁場。手機 銀行卡等物品一起塞在包裡,很容易造成銀行卡被 消磁 兩張銀行卡的磁條如果重疊在一起,也很有可能同時被消磁。女士提包的磁性暗釦 部分醫學檢查裝置如核磁共振儀也會造成銀行卡的磁化。銀行卡最好放在帶硬皮的錢夾裡,位置不能太貼近磁性包扣。千萬不要隨意扔在雜亂的包中,防止尖銳物品磨損 刮傷磁...