2012-08-09 29 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