/* =======================================
创 建 人: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')'年龄'