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')'年龄'

  • 相关阅读:
    ES-- Elasticsearch粗略分析
    springMVC之@Request
    Spring Boot入门
    反射四(动态代理)
    反射三(泛型)
    反射二(字段)
    反射一(方法)
    nutch和solr建立搜索引擎基础(单机版)
    Cinnamon桌面是怎么回事儿
    开启属于你的GNOME桌面
  • 原文地址:https://www.cnblogs.com/yachao1120/p/7376651.html
Copyright © 2011-2022 走看看