创建一个读取值并输出单词的函数

时间:2012-10-12 22:20:42

标签: sql-server

我有一个我需要创建的函数,它读取表中列的值,并将文本值输出到同一个表中的新列中。有问题的列(confidence_score)将具有数值,字母或空值。

如果confidence_score(nvarchar(2))是一个数字且小于或等于14,我需要计算列中的“高”,否则为“低”。如果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)似乎工作正常。当值不是数字时,我正在期待它们的高值和低值。问题似乎在isnumeric是真实的部分。无论置信度列中的数值是多少,我都会得到“高”值。我不确定我在这里做错了什么。

我感谢任何人都可以提供帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您将函数参数定义为nvarchar而不是nvarchar(2)。它会截断一个字符以外的任何内容,因此所有高于9的整数都会变为1.尝试将定义更改为:

CREATE FUNCTION dbo.avm_confidence_level(@score nvarchar(2))