SQL Server 计算年龄函数

需要处理的问题

在实际开发过程中,我们经常会遇到动态计算人员年龄的情况,其实如果单纯的计算年龄,其实在应用程序或者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
posted @   星火燎猿*  阅读(443)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示