3

テーブル内の列の値を読み取り、同じテーブル内の新しい列にテキスト値を出力する関数を作成する必要があります。問題の列(confidence_score)には、数値、文字、またはnull値のいずれかが含まれます。

confidence_score(nvarchar(2))が数値で、14以下の場合、計算列に「High」を含める必要があります。それ以外の場合は「Low」を含める必要があります。confidence_scoreが数値ではなく、値が「H」の場合、計算列に「High」が含まれている必要があります。それ以外の場合は「Low」が含まれています。

これが私が使用しているコードです:

CREATE FUNCTION dbo.avm_confidence_level(@score nvarchar)
RETURNS nvarchar(5) as
BEGIN
DECLARE @conversion as nvarchar(5)
    IF isnumeric(@score) = 1 BEGIN
        IF cast(@score as int) <= 14 BEGIN
            Set @conversion = 'High'
        END
        ELSE BEGIN
            Set @conversion = 'Low'
        END
    END
    ELSE BEGIN
        IF @score = 'H' BEGIN
            Set @conversion = 'High'
        END
        ELSE BEGIN
            Set @conversion = 'Low'
        END
    END

    RETURN @conversion
END

このコードを使用して、半分正しい結果が得られています。最初のチェック(isnumeric)は正常に機能しているようです。値が数値でない場合に期待している高値と低値を取得しています。問題は、isnumericbeingtrueセクション内にあるようです。実際にconfidence_score列にある数値に関係なく、「High」の値を取得しています。ここで何が間違っているのかわかりません。

私は誰もが提供できるどんな助けにも感謝します。

ありがとうございました。

4

1 に答える 1

1

これは、関数パラメーターを nvarchar(2) ではなく nvarchar として定義したためです。1 文字を超えるものはすべて切り捨てられるため、9 を超えるすべての int が 1 になります。定義を次のように変更してみてください。

CREATE FUNCTION dbo.avm_confidence_level(@score nvarchar(2))
于 2012-10-12T22:51:13.480 に答える