我这边有一个业务,需要客户填写身份证号,自动计算他的出生日期和年龄

在sql中,具体的存储过程实现是这样的:

  1. /***********************************************
  2. 根据身份证号计算出生日期和年龄
  3. Date:2017-10-15
  4. Author:xzl
  5. 条件:身份证号码
  6. 返回:出生日期和年龄
  7. ***********************************************/
  8. /***
  9. *根据身份证号计算出生日期和年龄
  10. ***/
  11. create proc [dbo].[sp_GetBirthDate_Age]
  12. @IDCard varchar(20),
  13. @BirthDate varchar(20) output,
  14. @Age int output
  15. as
  16. begin
  17. --声明变量--
  18. declare @BirthDateStr varchar(10)
  19. declare @YearStr varchar(10)
  20. declare @MonthStr varchar(10)
  21. declare @DayStr varchar(10)
  22. declare @NowDateStr varchar(20)
  23. declare @AgeStr varchar(10)
  24.  
  25. ----1、根据身份证号,计算出生日期---
  26. --设置IDCard
  27. --set @IDCard ='445182199403123781'
  28. --1)获取身份证号中年月日部分(返回:19940312)--
  29. set @BirthDateStr = SUBSTRING(@IDCard,7,8)
  30. --2)将获取年月日字符串转化为对应日期格式--
  31. --2.1)获取年部分--
  32. set @YearStr = SUBSTRING(@BirthDateStr,1,4)
  33. --2.2)获取月部分--
  34. set @MonthStr = SUBSTRING(@BirthDateStr,5,2)
  35. --2.3)获取日部分--
  36. set @DayStr = SUBSTRING(@BirthDateStr,7,2)
  37. --3)返回组合后的日期---
  38. set @BirthDate = @YearStr +'-'+@MonthStr+'-'+@DayStr
  39.  
  40. --2、根据出生日期和当前日期,计算年龄--
  41. --1)获取当前时间的日期部分(返回:2017-10-15)--
  42. set @NowDateStr = CONVERT(varchar(10),GETDATE(),23)
  43. --2)获取当前日期与出生日期的年份(年龄) 返回:23 --
  44. set @AgeStr = DATEDIFF(YEAR,@BirthDate,@NowDateStr)
  45. --3)判断当前日期与出生日期(是否过生日,未过生日减去1岁)--
  46. if(SUBSTRING(@BirthDate,6,5) <= SUBSTRING(@NowDateStr,6,5))
  47. begin
  48. --Cast()将字符转化为数字函数
  49. set @Age = CAST(@AgeStr as int)
  50. end
  51. else
  52. begin
  53. set @Age = CAST(@AgeStr as int)-1
  54. end
  55. --输出计算后的返回结果--
  56. select @BirthDate as 出生日期,@Age as 年龄
  57. end

在sql中,执行上面可在可编程性-->存储过程中看到创建的存储过程

存储过程的调用:

  1. --测试1:出生日期已过当前日期的---
  2. declare @IDCard varchar(20)
  3. declare @BirthDate varchar(20)
  4. declare @Age int
  5. set @IDCard=''
  6. exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output
  7. --返回结果--
  8. --出生日期:1994-10-10 年龄: 23
  1. --测试2:出生日期未过当前日期的---
  2. declare @IDCard varchar(20)
  3. declare @BirthDate varchar(20)
  4. declare @Age int
  5. set @IDCard=''
  6. exec sp_GetBirthDate_Age @IDCard,@BirthDate output,@Age output
  7. --返回结果--
  8. --出生日期:1994-10-18 年龄: 22

调用后结果:

aaarticlea/png;base64,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" alt="" />

sql server 根据身份证号计算出生日期和年龄的存储过程的更多相关文章

  1. js中如何通过身份证号计算出生日期和年龄

    在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChan ...

  2. oracle 根据身份证号计算出生日期

      1.情景展示 如何根据身份证号推算出出生日期? 2.解决方案 --根据身份证号计算出生日期 SELECT DECODE(LENGTH(ID_CARD), 18, SUBSTR(ID_CARD, 7 ...

  3. SQL语句通过身份证号计算年龄

    SQL语句通过身份证号计算年龄 1.截取身份证号上的出生日期 身份证一般为18位数和15位数 18位数身份证的第7-10位数是出生年份,第11-14位数是出生月日,所以18位身份证的年龄计算如下 su ...

  4. JavaScript 通过身份证号获取出生日期、年龄、性别 、籍贯

    JavaScript 通过身份证号获取出生日期.年龄.性别 .籍贯(很全) 效果图: 示例代码: //由于没有写外部JS,所以代码比较长!!! <!DOCTYPE html PUBLIC &qu ...

  5. 教你一招:根据身份证号计算出生年月和年龄 text函数和mid函数混用 datedif函数和today函数混用

    在电子表格Excel中,使用text函数和mid函数混用,根据身份证号计算出生年月: =text(mid(A2,,),"0!/00!/00") #0!/00!/00 为日期的格式# ...

  6. SQL 从身份证号得到出生日期、年龄、男女

    ), CONVERT(smalldatetime, SUBSTRING(b.IDCard, , )), ) AS BrithDate_Name, DATEDIFF(year, CONVERT(smal ...

  7. sqlalchemy 模型中添加根据身份证号计算性别和年龄

    class Users(Base, BaseMixin): username = Column(String(24)) id_Num = Column(String(18) ) # 身份证号码 @pr ...

  8. Microsoft SQL Server 数据库 错误号大全

    panchzh :Microsoft SQL Server 数据库 错误号大全0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒 ...

  9. Javascript 身份证号获得出生日期、获得性别、检查身份证号码

    //---------------------------------------------------------- // 功能:根据身份证号获得出生日期 // 参数:身份证号 psidno // ...

随机推荐

  1. JVM(一)

    1 Java类加载器包括几种?它们之间的关系是怎么样的?双亲委派机制是什么意思?有什么好处? 启动Bootstrap类加载.扩展Extension类加载.系统System类加载. 类加载器也是Java ...

  2. [转][smart3d]Smart3D之手动配置 S3C 索引加载全部的OSGB瓦片数据

    转自:https://blog.csdn.net/u013719339/article/details/77840728/ 一.须知: S3C是Smart3D内部格式,实质上是一个分块模型的索引,可以 ...

  3. Python全栈开发-Day1-Python基础1

    目录 Python介绍 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式f ...

  4. selenium+Page Objects(第一话)

    简单介绍一种selenium用来做web自动化测试的设计模式:Page Objects 一.Page Objects介绍 用官话说它是selenium中的一种页面对象设计模式(不是测试框架!是一种开展 ...

  5. Genome-wide gene-environment analyses of depression and reported lifetime traumatic experiences in UK Biobank

    Genome-wide gene-environment analyses of depression and reported lifetime traumatic experiences in U ...

  6. xml ----> 几个常用dtd头文件模板

    环境: idea ce 2018.1 "File --> settings... --> Editor --> file and code templates" ...

  7. Wireshark 文件分割和合并

    # 捕获文件的基本信息. capinfos <filename> 从结果中可以看到 http.pcapng 捕获文件的基本信息,包括文件类型.封装.包大小限制.包数.文件大小及时间等. # ...

  8. IBM messed up *AGAIN* in their thinkpad: 0xA0000 -> 0x9F000

    /*     * IBM messed up *AGAIN* in their thinkpad: 0xA0000 -> 0x9F000.     * They seem to have don ...

  9. 纯CSS方块转化梯形动画

    http://jasonning92.github.io/JasonsBlog/pages/%E7%BA%AFCSS%E6%96%B9%E5%9D%97%E8%BD%AC%E5%8C%96%E6%A2 ...

  10. Confluence 6 如何保持我空间的整洁

    如果你有很多用户在同一个空间中编辑和创建内容,你的空间将会很快的变得混乱不堪.你可以使用下面的一些步骤来避免这个的发生. 创建一系列的指南 让你的合作编辑用户知道创建页面的上级页面是什么,这样可以保证 ...