重複の可能性:
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
年齢については、hiredate を DOB に置き換えます。sysdate を to_date('28-DEC-2012') などの日付に置き換えます。
SELECT empno, ename, hiredate, TRUNC(MONTHS_BETWEEN(sysdate, hiredate)/12) years_of_service
FROM scott.emp
/