0

今日の日付から生年月日を引いた日付関数があります。結果を選択または実行するにはどうすればよいですか?

CREATE FUNCTION [dbo].[udfCalculateAge]
(
@DOB AS DATE,
@EndDate as DATE = '2999-01-01' -- Defaul is today's date (see below) but any date can be used here
)
RETURNS TINYINT
AS
BEGIN
DECLARE @Result as TINYINT

-- IF DEFAULT VALUE (marked as 2999-01-01 as it doesn't accept functions) IS USED THEN USE TODAY'S DATE
IF @EndDate = '2999-01-0'
SET @EndDate = GETDATE()
IF @DOB >= @EndDate -- trap errors
SET @Result = 0
ELSE
BEGIN
-- check if the person had its birthday in the specified year and calculate age
IF (MONTH(@EndDate)*100)+DAY(@EndDate) >= (MONTH(@DOB)*100)+DAY(@DOB)
SET @Result = DATEDIFF(Year,@DOB,@EndDate)
ELSE
SET @Result = DATEDIFF(Year,@DOB,@EndDate)-1
END

RETURN @Result

END
4

3 に答える 3

2

あなたは単にselectでそれを返すことができます

DECLARE @dob AS DATE = '19800101'
DECLARE @enddate AS DATE = '20200101'

SELECT [dbo].[udfCalculateAge](@dob, @enddate)

テーブルから選択して関数の値を他の列と一緒に返すときにも使用できます。

SELECT dob, enddate, [dbo].[udfCalculateAge](dob, enddate)
FROM table1

など、他の節でも使用できますがWHERE、パフォーマンス上の理由からお勧めできません。

デフォルトのパラメーターで関数を使用する場合は、defaultすべてのパラメーターを指定する必要があるため、2 番目のパラメーターとして使用します。

SELECT [dbo].[udfCalculateAge](@dob, default)
于 2013-10-13T19:49:50.503 に答える
1

これはあなたが探しているものですか?

DECLARE @dob date;
SET @dob = '1980-01-01';
SELECT udfCalculateAge(@dob, NULL);
于 2013-10-13T19:50:00.423 に答える