zoukankan      html  css  js  c++  java
  • SQL--通过身份证号得到年龄的

    /* =======================================
    创 建 人:CuiYaChao
    创建日期:2017-08-16
    功能描述:通过身份证号来计算年龄
    单元名称: Fun_GetCard
    ======================================= */
    IF EXISTS (SELECT * FROM sys.objects WHERE name='Fun_GetCard')
    DROP FUNCTION Fun_GetCard
    GO
    CREATE FUNCTION Fun_GetCard(@CardNo NVARCHAR(30))
    RETURNS NVARCHAR(20)
    AS
    BEGIN
    DECLARE @sResult NVARCHAR(20)=''
    DECLARE @CardNoTwo NVARCHAR(30)=''
    DECLARE @sYear INT =0
    SELECT @CardNoTwo=REPLACE(@CardNo,' ','')
    --18位的身份证号
    IF LEN(@CardNoTwo)=18
    BEGIN
    SELECT @sResult=DATEDIFF(YEAR,SUBSTRING(@CardNoTwo,7,4),GETDATE())
    END
    --15位的身份证号
    ELSE
    BEGIN
    SELECT @sYear=CAST(SUBSTRING(@CardNoTwo,7,2) AS INT)
    --2000年前的或者 本年度前的
    IF @sYear>17
    BEGIN
    SELECT @sResult=DATEDIFF(YEAR,CAST(('19'+CAST(@sYear AS NVARCHAR(10))) AS NVARCHAR(10)),GETDATE())
    END
    --2000年至本年度期间的
    ELSE
    BEGIN
    --2010年之后的
    IF LEN(@sYear)=2
    BEGIN
    SELECT @sResult=DATEDIFF(YEAR,CAST(('20'+CAST(@sYear AS NVARCHAR(10))) AS NVARCHAR(10)),GETDATE())
    END
    --2000年至2009年的
    IF LEN(@sYear)=1
    BEGIN
    SELECT @sResult=DATEDIFF(YEAR,CAST(('200'+CAST(@sYear AS NVARCHAR(10))) AS NVARCHAR(10)),GETDATE())
    END
    END
    END
    RETURN @sResult
    END
    GO
    --=================================================================================
    SELECT DATEDIFF(YEAR,'1991','2017')
    SELECT SUBSTRING('130503670401001',7,2)
    SELECT dbo.Fun_GetCard('412723199105051238')'年龄'
    SELECT dbo.Fun_GetCard('130503000401001')'年龄'

  • 相关阅读:
    杭电2050
    杭电2043,小细节。。。。。
    杭电2034,坑爹的人见人爱a-b
    杭电2035--人见人爱A^B
    杭电2032--杨辉三角
    杭电2029--Palindromes _easy version(回文串)
    杭电2028--Lowest Common Multiple Plus
    NPOI大数据分批写入同个Excel
    [每日一题] OCP1z0-047 :2013-07-25 权限――角色与对象权限
    Ubuntu下安装搜狗拼音输入法
  • 原文地址:https://www.cnblogs.com/yachao1120/p/7376651.html
Copyright © 2011-2022 走看看