2016-09-26 70 views
1

下面是我的數據看起來像的情況下聲明:情況下,當語句轉換失敗,包含整數和字符串列

0 
1 
NULL 
Not Obtainable 
NULL 
Not Obtainable 
2 
0 
NULL 
1 
NULL 
NULL 

這裏是我試圖使用查詢:

SELECT 
    *, 
    CASE 
     WHEN ER_MENTAL > 1 THEN 'Yes' 
     WHEN ER_MENTAL < 1 THEN 'No' 
     WHEN ER_MENTAL = 'Not Obtainable' THEN 'No' 
    END AS ER_MENTAL_RESP 
FROM 
    #HLQ 

這是我得到的錯誤:轉換爲varchar值'無法獲得對數據的類型爲int時

轉換失敗。

我已經嘗試了各種版本的CONVERT在每種情況下的面前的時候,沒有運氣

+1

時會發生什麼ER_MENTAL = 1?在檢查「不可獲取」之後,您可能需要一個ELSE作爲其他所有值。 –

回答

1

如果你需要一個版本,將在SQL Server早期版本的工作,然後使用ISNUMERIC應該工作:

select er_mental, 
    case when ISNUMERIC(er_mental) = 1 then 
     case when er_mental > 1 then 'Yes' 
      when er_mental < 1 then 'No' 
     end 
     when er_mental = 'Not obtainable' then 'No' 
    end as er_mental_resp 
from #hlq; 
0

你的列是VARCHAR,所以你不能把它無需轉換比較它的INT。您可以使用TRY_CONVERT,因爲您使用的是2012年,這將避免您的錯誤。你也可以將它與varchar相比較,比如ER_MENTA > '1',但是你可能會遇到問題,因爲varchar不會以相同的方式進行比較。即當使用varchar時,11是< 2。 select 1 where '11' < '2'

SELECT *, 
CASE WHEN TRY_CONVERT(INT, ER_MENTAL) > 1 THEN 'Yes' 
WHEN TRY_CONVERT(INT, ER_MENTAL) < 1 THEN 'No' 
WHEN ER_MENTAL = 'Not Obtainable' THEN 'No' 
END AS ER_MENTAL_RESP 
FROM #HLQ