3

我有一个需要创建的函数,它读取表中列的值并将文本值输出到同一表中的新列中。有问题的列 (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)似乎工作正常。当值不是数字时,我得到了我期望的高值和低值。这个问题似乎在数字为真部分。无论 confidence_score 列中的实际数值是多少,我都会得到一个“高”值。我不确定我在这里做错了什么。

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

谢谢你。

4

1 回答 1

1

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

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