可能重複:
How to calculate age in T-SQL with years, months, and days如何計算年齡/年數兩個日期
一個項目我工作,我需要的時候,他們計算一個人的年齡加入系統;在網上查找後,我發現可以採取多種方式,但其中大部分在涉及閏年時都存在輕微問題。
以下解決方案是我如何計算過去/年齡的年數。希望這可以幫助別人
可能重複:
How to calculate age in T-SQL with years, months, and days如何計算年齡/年數兩個日期
一個項目我工作,我需要的時候,他們計算一個人的年齡加入系統;在網上查找後,我發現可以採取多種方式,但其中大部分在涉及閏年時都存在輕微問題。
以下解決方案是我如何計算過去/年齡的年數。希望這可以幫助別人
你需要下面的方法添加到您的數據庫:
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聘請的年齡。將sysdate替換爲您的日期,如to_date('28 -DEC-2012'):
SELECT empno, ename, hiredate, TRUNC(MONTHS_BETWEEN(sysdate, hiredate)/12) years_of_service
FROM scott.emp
/
我們可以假設我們有出生日期嗎?閏年有什麼問題? –