我有一个我需要创建的函数,它读取表中列的值,并将文本值输出到同一个表中的新列中。有问题的列(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是真实的部分。无论置信度列中的数值是多少,我都会得到“高”值。我不确定我在这里做错了什么。
我感谢任何人都可以提供帮助。
谢谢。
答案 0 :(得分:1)
这是因为您将函数参数定义为nvarchar而不是nvarchar(2)。它会截断一个字符以外的任何内容,因此所有高于9的整数都会变为1.尝试将定义更改为:
CREATE FUNCTION dbo.avm_confidence_level(@score nvarchar(2))