0

関数[dbo].[MyAge]があります。

CREATE FUNCTION [dbo].[MyAge]
(
@DOB AS DATE,
@EndDate as DATE = '2999-01-01'
)

RETURNS TINYINT
AS
BEGIN
DECLARE @Result as TINYINT
IF @EndDate = '2999-01-0'
SET @EndDate = GETDATE()
IF @DOB >= @EndDate
SET @Result = 0
ELSE
BEGIN
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

しかし、選択すると、トピックの名前のようなエラーが表示されます。文字列から日時を変換する際に変換に失敗しました

DECLARE @dob datetime
SET @dob='19560109'
SELECT [dbo].[MyAge]( @dob,default )

しようとしSET @dob='1956-01-09'ますが、同じ結果が表示されSET DATEFORMAT ymdます。

そして、この関数を再構築して、月と日で年齢を計算したいのですが、エラーのために実行できません。

4

1 に答える 1

1

問題は、終了日を'2999-01-0'と比較しているときに、このエラー、文字列から日付および/または時刻を変換するときに変換に失敗したことです。

この「2999-01-01」で試してください

それは正常に動作しています...

このようにします IF @EndDate = '2999-01-01'

于 2013-10-23T03:24:09.760 に答える