sqlserver如何将身份证号码的出生日期提取出来转为日期类型数据?
5个回答
展开全部
#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");
}
"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");
}
展开全部
你截出来的是19810101,这个不能直接做时间处理,要单独截1981,01,01,然后拼接成1981-01-01,才可以做数据类型转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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的用法吧?
a.身份证号,b.身份证号
from
新身份证表
a,旧身份证表
b
where
substring(a.身份证号,1,6)=substring(b.身份证号,1,6)
and
substring(a.身份证号,9,9)=substring(b.身份证号,7,9)
最后一个是验证位,估计用不上吧?
上边也有可能我数错了,你改一下就好,知道substring的用法吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)截取第七、八位数没有错
(2)错就错在as
datetime错误。
截取获得的两位数字不可能转成时间格式。只能转成int、string或者varchar格式
(3)改正方法:把as
datetime改成as
int
或者改成as
varchar
望采纳!
(2)错就错在as
datetime错误。
截取获得的两位数字不可能转成时间格式。只能转成int、string或者varchar格式
(3)改正方法:把as
datetime改成as
int
或者改成as
varchar
望采纳!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说明:
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’这样的身份证出现时,也会导致你整个身份证提取报错。
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’这样的身份证出现时,也会导致你整个身份证提取报错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询