0

注:以下に表示されている患者データは、私が作成した「ダミー」データです。実際の患者の実際の情報ではありません。

次の変換を含む関数があります。

Declare @bdate date 
set @bdate =  CONVERT ( date , left(@dob,8) , 112 )

これをクエリウィンドウで実行すると、日付がうまく変換されます

select CONVERT(date, left('19900101', 8), 112)  //returns a good date

しかし、ビジュアルスタジオで同じコードを含むスカラー関数をステップ実行すると、エラーが発生します...

Declare @bdate date 
set @bdate =  CONVERT ( date , left(@pidPatientDob,8) , 112 )

投げる...

[dbo].[getAgeAtTestDate] ( @obxTestDate = '20120101', @pidPatientDob = '19900101' ) を実行しています。

文字列から日時を変換する際に変換に失敗しました。データが存在しない場合の読み取りの試みは無効です。

クエリウィンドウでは機能するのに、関数では機能しないのはなぜですか? 関数でパラメータが適切に入力されているようです。

これはnullを返す関数の全文です(エラーのためだと思います)

ALTER FUNCTION [dbo].[getAgeAtTestDate] 
(
    -- Add the parameters for the function here
    @obxTestDate as nvarchar(50), @pidPatientDob as nvarchar(50)
)
RETURNS int
AS
BEGIN
    Declare @bdate date 
    set @bdate =  CONVERT ( date , left(@pidPatientDob,8) , 112 )

    Declare @testDate date 
    set @testDate =  CONVERT ( date , left(@testDate,8) , 112 )

    -- Return the result of the function
    RETURN datediff(mm,  @testDate, @bdate)
END
4

1 に答える 1

2

パラメータはobxTestDateではなくと呼ばれるtestDateので、変更してください。

set @testDate =  CONVERT ( date , left(@testDate,8) , 112 )

の中へ

set @testDate =  CONVERT ( date , left(@obxTestDate,8) , 112 )

そして物事はよりうまくいくでしょう。

補足として、あなたも逆にしたと思います。DATEDIFF開始日は終了日より前に来る必要があります。

RETURN datediff(mm,  @bdate, @testDate)
于 2013-02-21T20:36:11.290 に答える