sqlserver如何将身份证号码的出生日期提取出来转为日期类型数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver如何将身份证号码的出生日期提取出来转为日期类型数据?相关的知识,希望对你有一定的参考价值。
#include"stdio.h"
void
main()
int
i;
/*身份证的第i位*/
int
s[17];
/*定义一个数组用来存放身份证的前17位*/
int
t[17];
/*各位相乘后的数组*/
int
m;
/*余数*/
int
t18;
/*身份证的第18位0--9*/
char
t18c;
/*身份证的第18位X*/
long
int
sum=0;
for(i=0;i<17;i++)
printf("请输入身份证的第%d位:",i+1);
scanf("%d",&s[i]);
switch(i+1)
/*身份证的1到17位要乘的数一次是7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
*/
case
1:t[i]=s[i]*7;break;
case
2:t[i]=s[i]*9;break;
case
3:t[i]=s[i]*10;break;
case
4:t[i]=s[i]*5;break;
case
5:t[i]=s[i]*8;break;
case
6:t[i]=s[i]*4;break;
case
7:t[i]=s[i]*2;break;
case
8:t[i]=s[i]*1;break;
case
9:t[i]=s[i]*6;break;
case
10:t[i]=s[i]*3;break;
case
11:t[i]=s[i]*7;break;
case
12:t[i]=s[i]*9;break;
case
13:t[i]=s[i]*10;break;
case
14:t[i]=s[i]*5;break;
case
15:t[i]=s[i]*8;break;
case
16:t[i]=s[i]*4;break;
case
17:t[i]=s[i]*2;break;
sum=sum+t[i];
printf("前17位相乘后的和为%ld\n",sum);
m=sum%17;
printf("对17取余后的值位:",m);
switch(m)
/*各个余数所对应第18位身份证号1
0
X
9
8
7
6
5
4
3
2*/
case
0:t18=1
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
1:t18=0
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
2:t18c='X';printf("这是一个合法的身份证号码,第18位是%c",t18c);break;
case
3:t18=9
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
4:t18=8
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
5:t18=7
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
6:t18=6
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
7:t18=5
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
8:t18=4
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
9:t18=3
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
case
10:t18=2
;printf("这是一个合法的身份证号码,第18位是%d",t18);break;
default:printf("这不是一个合法的身份证号码");
printf("\n");
参考技术A 你截出来的是19810101,这个不能直接做时间处理,要单独截1981,01,01,然后拼接成1981-01-01,才可以做数据类型转换。 参考技术B select
a.身份证号,b.身份证号
from
新身份证表
a,旧身份证表
b
where
substring(a.身份证号,1,6)=substring(b.身份证号,1,6)
and
substring(a.身份证号,9,9)=substring(b.身份证号,7,9)
最后一个是验证位,估计用不上吧?
上边也有可能我数错了,你改一下就好,知道substring的用法吧? 参考技术C (1)截取第七、八位数没有错
(2)错就错在as
datetime错误。
截取获得的两位数字不可能转成时间格式。只能转成int、string或者varchar格式
(3)改正方法:把as
datetime改成as
int
或者改成as
varchar
望采纳! 参考技术D 说明:
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’这样的身份证出现时,也会导致你整个身份证提取报错。
以上是关于sqlserver如何将身份证号码的出生日期提取出来转为日期类型数据?的主要内容,如果未能解决你的问题,请参考以下文章