可能重复:
如何在 T-SQL 中用年、月和日计算年龄
在我正在做的一个项目中,我需要计算一个人加入系统时的年龄;在互联网上查看后,我发现了各种方法可以做到这一点,但其中大多数在涉及闰年时都有轻微的问题。
下面的解决方案是我如何计算过去的年数/年龄。希望这对其他人有帮助
可能重复:
如何在 T-SQL 中用年、月和日计算年龄
在我正在做的一个项目中,我需要计算一个人加入系统时的年龄;在互联网上查看后,我发现了各种方法可以做到这一点,但其中大多数在涉及闰年时都有轻微的问题。
下面的解决方案是我如何计算过去的年数/年龄。希望这对其他人有帮助
您需要将以下方法添加到数据库中:
CREATE FUNCTION [dbo].[fnCalAge] (@DiffFrom DATE, @DiffTo DATE) RETURNS INT
AS
BEGIN
DECLARE @NumOfYears INT
SET @NumOfYears = (SELECT
DATEDIFF(YEAR, @DiffFrom, @DiffTo) +
CASE
WHEN MONTH(@DiffTo) < MONTH(@DiffFrom) THEN -1
WHEN MONTH(@DiffTo) > MONTH(@DiffFrom) THEN 0
ELSE
CASE WHEN DAY(@DiffTo) < DAY(@DiffFrom) THEN -1 ELSE 0 END
END)
IF @NumOfYears < 0
BEGIN
SET @NumOfYears = 0;
END
RETURN @NumOfYears;
END
然后在 SQL 查询中调用它,类似于以下内容:
SET DATEFORMAT dmy
SELECT dbo.fnCalAge(CAST('20/06/1987' AS DATE), CAST('20/06/2013' AS DATE))
假设@bDate 是生日的日期时间,@today 是今天的日期,那么...
Declare @bDay Date = '31 dec 2000'
Declare @today Date = cast(getdate() as date)
Select datediff(Year, @bDay, @today) -
case When datepart(dayofYear, @today) <
datepart(dayofYear, @bDay) Then 1 Else 0 End
用 DOB 代替hiredate 的年龄。将 sysdate 替换为您的日期,例如 to_date('28-DEC-2012') :
SELECT empno, ename, hiredate, TRUNC(MONTHS_BETWEEN(sysdate, hiredate)/12) years_of_service
FROM scott.emp
/