2012-10-12 39 views
3

我有一個函數,我需要創建它讀取表中的列的值,並將文本值輸出到同一個表中的新列。問題列(confidence_score)將具有數字值,字母或空值。創建一個讀取值和輸出字的函數

如果confidence_score(nvarchar(2))是一個數字並且小於或等於14,我需要計算列中有'高',否則'低'。如果confidence_score不是數字並且值爲'H',我需要計算列中有'高',否則'低'。

這裏是我使用的代碼:

使用此代碼對了一半
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是真正的部分。無論在confidence_score列中實際存在什麼數值,我都會獲得「高」值。我不確定我在這裏做錯了什麼。

我感謝任何人都可以提供的幫助。

謝謝。

回答

1

這是因爲您將函數參數定義爲nvarchar而不是nvarchar(2)。它截斷任何超過一個字符,所以所有的整數高於9變得1.嘗試改變定義:

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

我自己埋在厚厚的代碼,甚至沒有注意到這一點。非常感謝你。這工作。 – user1742469

相關問題