2012-08-09 33 views
1

我正在使用SQL Server 2005.我試圖從TINYINT字段中進行選擇。如果該字段的值爲0,我想選擇一個空字符串,而不是''。字段名稱是級別。下面是我在做什麼:當TINYINT字段條件符合返回字符串時的SELECT CASE

SELECT 
[Level] = 
Case 
t.[Level] 
    WHEN 0 THEN ' ' 
    ELSE t.[Level] 
END 
FROM table t 

該代碼總是返回0,我試圖解決該問題,並試圖此:

SELECT 
[Level] = 
Case 
t.[Level] 
    WHEN 0 THEN 'test' 
    ELSE t.[Level] 
END 
FROM table t 

而且我得到了一個錯誤Conversion failed when converting the varchar value 'test' to data type tinyint

所以我看到這裏存在轉換問題。我試過了:

SELECT 
[Level] = 
Case 
t.[Level] 
    WHEN 0 THEN CONVERT(VARCHAR,t.[level]) 
    ELSE t.[Level] 
END 
FROM table t 

但是,這當然仍然返回0,只是字符,所以它仍然沒有做我所需要的。我在想,最有可能有更好的方式來做到這一點,但我不知道如何處理它。誰能給我一些關於如何處理這個問題的建議?非常感謝!

回答

3

對於CASE語句,所有返回的值必須是同一類型的(或自動可轉換);這就是''工作正常的原因,但'test'不是。

SELECT [Level] = 
Case t.[Level] 
    WHEN 0 THEN ' ' 
    ELSE CONVERT(VARCHAR(3), t.[Level]) 
END 
FROM table t 
1

你試圖解決這個問題的方法是錯誤的;你需要的其他部分轉換爲varchar到VARCHAR空字符串匹配:

SELECT 
[Level] = 
Case 
t.[Level] 
    WHEN 0 THEN '' 
    ELSE CAST(t.[Level] AS VARCHAR(10)) 
END 
FROM table t