想了解oracle根据身份证号计算出生日期的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于oracle根据身份证号计算出生日期的年龄的相关问题,此外,我们还将为您介绍关于C#根据身份证号码判
想了解oracle 根据身份证号计算出生日期的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于oracle 根据身份证号计算出生日期的年龄的相关问题,此外,我们还将为您介绍关于C#根据身份证号码判断出生日期和性别、excel如何提取身份证号码的出生日期、excel怎么根据身份证号码计算年龄、excel根据身份证号算出生日期的新知识。
本文目录一览:- oracle 根据身份证号计算出生日期(oracle 根据身份证号计算出生日期的年龄)
- C#根据身份证号码判断出生日期和性别
- excel如何提取身份证号码的出生日期
- excel怎么根据身份证号码计算年龄
- excel根据身份证号算出生日期
oracle 根据身份证号计算出生日期(oracle 根据身份证号计算出生日期的年龄)
1.情景展示
如何根据身份证号推算出出生日期?
2.解决方案
--根据身份证号计算出生日期
SELECT DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 7, 8),
15,
''19'' || SUBSTR(ID_CARD, 7, 6)) 出生日期
FROM VIRTUAL_CARD
WHERE LENGTH(ID_CARD) = 18
OR LENGTH(ID_CARD) = 15
3.拓展
根据身份证号,截取出生日期后,更新到该表的birthday(日期类型)字段
第一步:一个SQL搞定
UPDATE VIRTUAL_CARD
SET BIRTHDAY = TO_DATE(DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 7, 8),
15,
''19'' || SUBSTR(ID_CARD, 7, 6)),
''yyyymmdd'')
WHERE REMARK = ''3'';
正常情况下,它会执行没有问题。(没有报错的不用再往下看了)
但是,现实往往不按我们想象的路子走。
这个错误的意思是:无效的月份,再直白点是:月份错误,换句话说就是:本来月份有01-12个月,但是按照身份证截取的出生月份超出了这个范围,所以在转换日期的时候报错。
第二步:删除无效的月份所在行数据
DELETE FROM VIRTUAL_CARD
WHERE ID_CARD IN (SELECT ID_CARD
FROM (SELECT DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 11, 2),
15,
SUBSTR(ID_CARD, 9, 2)) MON,
ID_CARD
FROM VIRTUAL_CARD
WHERE REMARK = ''3'')
WHERE MON NOT IN (''01'',
''02'',
''03'',
''04'',
''05'',
''06'',
''07'',
''08'',
''09'',
''10'',
''11'',
''12''))
in()函数里,查询出来的是脏数据,我选择删掉。
再次执行第一步的代码,还是报这个错误。
既然月份存在的脏数据已经删除,那么是不是日期出了问题?即:天数超出了01-31天,这个范围
第三步:删除无效的天数
DELETE FROM VIRTUAL_CARD
WHERE ID_CARD IN (SELECT ID_CARD
FROM (SELECT /*DISTINCT*/
DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 13, 2),
15,
SUBSTR(ID_CARD, 11, 2)) DA,
ID_CARD
FROM VIRTUAL_CARD
WHERE REMARK = ''3'')
WHERE DA != 01
AND DA != 02
AND DA != 03
AND DA != 04
AND DA != 05
AND DA != 06
AND DA != 07
AND DA != 08
AND DA != 09
AND DA != 10
AND DA != 11
AND DA != 12
AND DA != 13
AND DA != 14
AND DA != 15
AND DA != 16
AND DA != 17
AND DA != 18
AND DA != 19
AND DA != 20
AND DA != 21
AND DA != 22
AND DA != 23
AND DA != 24
AND DA != 25
AND DA != 26
AND DA != 27
AND DA != 28
AND DA != 29
AND DA != 30
AND DA != 31)
说明:既可以用in()函数,也可以使用!=,in()方便一些,另外,oracle中的整数类数值型字符串,可以不加""。
果不其然,日期也有脏数据,再次删掉,执行第一步的代码,还是报错。
思考:既然日期也搞定了,还有哪会有问题?
首先,闰年有366天,这说明闰年的2月份有29天,平年有365天,2月份对应28天。
其次,1,3,5,7,8,10,12,这7个月有31天,4,6,9,11,这4个月有30天。
to_date()函数,会对其进行严格校验,只有日期无效,就不予转换。
2019年是平年,2月只有28天,当我设置成29天时,就会报月份无效。
第四步:删除假闰年数据
DELETE FROM VIRTUAL_CARD
WHERE ID_CARD IN (SELECT ID_CARD
FROM (SELECT DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 7, 4),
15,
''19'' || SUBSTR(ID_CARD, 7, 2)) YEA,
DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 11, 2),
15,
SUBSTR(ID_CARD, 9, 2)) MON,
DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 13, 2),
15,
SUBSTR(ID_CARD, 11, 2)) DA,
ID_CARD
FROM VIRTUAL_CARD
WHERE REMARK = ''3'')
WHERE MON = ''02''
AND DA > 28 /*2月份超过28天*/
AND MOD(YEA, 4) != 0) /*余数不为0*/
说明:闰年能够被4整除,2月份为29天,反之,平年超过28天的都是脏数据。
第五步:删除4,6,9,11月超过30天的数据
DELETE FROM VIRTUAL_CARD
WHERE ID_CARD IN
(SELECT ID_CARD
FROM (SELECT DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 11, 2),
15,
SUBSTR(ID_CARD, 9, 2)) MON,
DECODE(LENGTH(ID_CARD),
18,
SUBSTR(ID_CARD, 13, 2),
15,
SUBSTR(ID_CARD, 11, 2)) DA,
ID_CARD
FROM VIRTUAL_CARD
WHERE REMARK = ''3'')
WHERE (MON IN (''04'', ''06'', ''09'', ''11'') AND DA > 30))
再次执行第一步的更新代码,成功更新完毕。
为了以防万一,先做检验,再提交数据。(在当前窗口执行查询SQL)
没有毛病,提交数据,大功告成。
另外,看到这里,我们对身份证的有效性的校验就又多了一种方式。
通过截取身份证号的出生日期,利用to_date()函数进行日期转换,转换失败的话,说明该身份证号绝壁有问题。
还有一种方式是:系统游标批量更新法
使用游标循环单行更新,捕获异常,继续执行下一条数据更新,直至更新完毕。
这样,最后birthday字段没有更新的行数据(字段为空),就是脏数据。
4.拓展2
保留身份证号的前4位和后4位,中间部位隐藏。
SELECT SUBSTR(ID_CARD, 1, 4) ||/*截取前4位*/
DECODE(LENGTH(ID_CARD), 18, ''**********'', 15, ''*******'') ||/*中间用*号代替*/
SUBSTR(ID_CARD, -4) 身份证号/*截取后4位*/
FROM VIRTUAL_CARD
WHERE REMARK = 3
ORDER BY ADDRESS
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
- 个人主页
- oracle主题
C#根据身份证号码判断出生日期和性别
18位的身份证,前面六位代表了你户籍所在地,第七位到第十四位代表了你的出生年月,第十五位到第十七为代表了你的性别(偶数为女,奇数为男),根据这一信息,我在系统开发的录入员工的身份证后控件焦点转移时根据身份证号码获得生日和性别。
用C#写的代码如下:
/// <summary> /// 在控件验证 textBox_IdentityCard 的 Validated事件中定义身份证号码的合法性并根据身份证号码得到生日和性别 /// </summary> private void textBox_IdentityCard_Validated(object sender,EventArgs e) { try { //获取得到输入的身份证号码 string identityCard = textBox_IdentityCard.Text.Trim(); if (string.IsNullOrEmpty(identityCard)) { //身份证号码不能为空,如果为空返回 MessageBox.Show("身份证号码不能为空!"); if (textBox_IdentityCard.CanFocus) { textBox_IdentityCard.Focus();//设置当前输入焦点为textBox_IdentityCard } return; } else { //身份证号码只能为15位或18位其它不合法 if (identityCard.Length != 15 && identityCard.Length != 18) { MessageBox.Show("身份证号码为15位或18位,请检查!"); if (textBox_IdentityCard.CanFocus) { textBox_IdentityCard.Focus(); } return; } } string birthday = ""; string sex = ""; //处理18位的身份证号码从号码中得到生日和性别代码 if (identityCard.Length == 18) { birthday = identityCard.Substring(6,4) + "-" + identityCard.Substring(10,2) + "-" + identityCard.Substring(12,2); sex = identityCard.Substring(14,3); }<br> //处理15位的身份证号码从号码中得到生日和性别代码 if (identityCard.Length == 15) { birthday = "19" + identityCard.Substring(6,2) + "-" + identityCard.Substring(8,2) + "-" + identityCard.Substring(10,2); sex = identityCard.Substring(12,3); }<br> textBox_Birthday.Text = birthday; //性别代码为偶数是女性奇数为男性 if (int.Parse(sex) % 2 == 0) { this.comboBox_Sex.Text = "女"; } else { this.comboBox_Sex.Text = "男"; } } catch (Exception ex) { MessageBox.Show("身份证号码输入有误"); if (textBox_IdentityCard.CanFocus) { textBox_IdentityCard.Focus(); } return; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
excel如何提取身份证号码的出生日期
在日常生活中,总会经常接触一些表格和数据,也会遇到在excel表格中提取身份证号码的出生日期;以下就介绍一下,如何在表格中提取身份证号码中的出生日期。(以Microsoft Office Excel 97-2003工作表作为示范),一起来看看吧!
步骤
1、因excel表格版本比较多,现以excel2003版为例,首先打开自己需要用的表格文件,如图所示
2、然后用鼠标选取身份证号码所在的D列,再点击鼠标右键,选择其中的“ 设置单元格格式 ”,或者按键盘快捷键“Ctrl键”+“1键”代替,如图所示
3、然后会出现以下界面,选择菜单“ 数字 ”中的“ 文本 ”选项,再点击下方的“ 确定 ”按钮(该操作是为了能正确显示身份证号码),如图所示
4、然后返回表格中,再正确输入身份证号码,或者在其他excel表格中复制粘贴过来,如图所示
5、点击“ 出生日期 ”下方的第一个空白格,然后再点击表格最上方功能菜单中的“ 公式 ”按钮,选择其中的“ 插入函数 ”按钮,如图所示
6、即可出现以下“ 插入函数 ”界面,选择最上方的选项“常用公式”,然后点击“ 提取身份证生日 ”,再点击“参数输入”中“身份证号码”右边的小方框,如图所示
7、然后会出现以下界面,再用鼠标点击身份证号码的第一行,被选择的格子周边会呈虚线状态,再点击蓝色窗口的最右边小方框,如图所示
8、点击“ 插入函数 ”窗口的“ 确定 ”按钮,返回excel表格则会发现第一行的提取出生日期的操作已经完成了,如图所示
9、然后将鼠标箭头放置到第一个出生日期格子的右下角,如图红色方框处;待鼠标箭头呈“+”形状时,按住鼠标左键往下拉(该操作是为了将下面的格子也有同样的格式)。
10、完成以上全部步骤之后,则将整个excel表格中身份证号码的出生日期全部提取出来了,如图所示
注意事项
步骤六中一定要选取参数输入,不然会成为错误的公式,无法达到预想效果。
以上就是在excel表格中如何快速提取身份证号码中的出生日期方法介绍,操作很简单的,大家学会了吗?希望这篇文章能对大家有所帮助!
excel怎么根据身份证号码计算年龄
1、打开excel文档
2、在要计算年龄的单元格内输入YEAR(TODAY())-MID(A2,7,4),其中A2为身份证号的单元格
3、输入计算公式后,按回车键即可计算出年龄
推荐教程:excel教程
以上就是excel怎么根据身份证号码计算年龄的详细内容,更多请关注php中文网其它相关文章!
excel根据身份证号算出生日期
每个人都有自己对应的身份证号,通过身份证号可以查看自己的出生年月,如果在excel中,输入身份证号,通过使用相关函数也可以获取自己的出生年月。那么该怎么做呢?
首先打开excel,输入一系列身份证号,我们在旁边一列输入出生年月。
然后在下面的单元格中输入“=mid()”,出现mid函数,双击,mid函数可以提取数值中的部分数值。
通过在mid函数中输入三个参数:字符串,字符串中需要截取的部分字符开始的位置、可截取字符的个数,可以得到你所需要的字符,我们可以知道出生日期在身份证的第7个位置,需要截取8个数字,所以应该输入“=MID(B17,7,8)”。
这样,拖动填充柄后,所有的身份证中的出生日期就提取出来了。
如果想使提取的出生年月按一定的格式呈现,则还需要应用到text函数,输入“=text()”,应用text函数。
然后在text函数中嵌套mid函数,输入“=TEXT(MID(B17,7,8),"0-00-00")”,然后回车。这样就自动获取了身份证号上的出生日期信息了。
更多Excel相关技术文章,请访问Excel教程栏目进行学习!
以上就是excel根据身份证号算出生日期的详细内容,更多请关注php中文网其它相关文章!
今天关于oracle 根据身份证号计算出生日期和oracle 根据身份证号计算出生日期的年龄的分享就到这里,希望大家有所收获,若想了解更多关于C#根据身份证号码判断出生日期和性别、excel如何提取身份证号码的出生日期、excel怎么根据身份证号码计算年龄、excel根据身份证号算出生日期等相关知识,可以在本站进行查询。
本文标签: