SQL Server 计算年龄函数

SQL Server 计算年龄函数

  • 需要处理的问题
  • 实现思路
    • 先将int类型转换成datetime
    • 创建sqlserver函数
  • 创建视图

需要处理的问题

在实际开发过程中,我们经常会遇到动态计算人员年龄的情况,其实如果单纯的计算年龄,其实在应用程序或者sql语句里面处理一下就好了,但是如果需要根据年龄进行筛选并且数据要求分页,这个问题就变的复杂起来,为了已最快的速度解决这个问题,我们就采用创建数据库函数的方式,并且结合表我们和函数结合创建视图,来快速解决相应的需求,解决方案有很多,也许我这种不是性能最优的,我只介绍快速处理问题的方案!我们的数据存储类型也不是datetime类型而是Int类型,所以再处理问题之前我们还需要经过一系列的转换将int类型转换成datetime类型!存取类型如下

-- 20200602000000

实现思路

先将int类型转换成datetime

CONVERT(datetime,CONVERT(varchar(10),CAST(SUBSTRING(CAST(出生年月 AS varchar),0,9) AS datetime),120))

创建sqlserver函数

  IF EXISTS(SELECT 1 FROM sysobjects WHERE [name] = 'GetAge')
      DROP FUNCTION dbo.GetAge
  go
  CREATE FUNCTION dbo.GetAge
  (
      @birthday DATETIME
  )
  RETURNS INT
  AS
 BEGIN
     IF(@birthday IS NOT NULL AND ISDATE(@birthday) = 1)
         BEGIN
             DECLARE @age INT , @y INT , @m INT , @d INT , @now DATETIME
             SET @now = GETDATE()
             SET @y = DATEPART(YEAR,@now) - DATEPART(YEAR,@birthday)
             SET @m = DATEPART(MONTH,@now) - DATEPART(MONTH,@birthday)
             SET @d = DATEPART(DAY,@now) - DATEPART(DAY,@birthday)
             IF(@m = 0 AND @d = 0)
                 BEGIN
                     SET @age = @y
                 END
             ELSE
                 BEGIN
                     IF @m > 0 OR (@m = 0 AND @d > 0)
                         SET @age = @y
                     ELSE
                         SET @age = @y - 1
                 END
             IF @age < 0 SET @age = 0
         END
     ELSE
         BEGIN
             SET @age = NULL
         END
     RETURN @age
 END

创建视图

CREATE VIEW [dbo].[View_RC_PersonnelManage]
AS
SELECT     a.*, dbo.GetAge(CONVERT(datetime, CONVERT(varchar(10), 
                      CAST(SUBSTRING(CAST(出生年月 AS varchar), 0, 9) AS datetime), 120))) AS 年龄
FROM         dbo.人员信息表 AS a

GO

你可能感兴趣的:(SQLSERVER)