当TINYINT字段条件满足返回字符串时的SELECT CASE

时间:2012-08-09 13:48:00

标签: sql sql-server sql-server-2005

我正在使用SQL Server 2005.我正在尝试从TINYINT字段中进行选择。如果字段的值为0,我想选择一个空字符串而不是''。字段名称为level。正是我正在做的事情:

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,只是角色,所以它仍然没有做我需要的。我认为最有可能做到这一点的方法更好,但我不确定如何处理它。谁能给我一些关于如何处理这个问题的建议?非常感谢!

2 个答案:

答案 0 :(得分:3)

对于CASE语句,所有返回的值必须是相同类型(或自动转换);这就是''工作的原因,但'test'没有。

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

答案 1 :(得分:1)

你试图解决这个问题的方法是错误的;你需要将else部分转换为varchar以匹配varchar空字符串:

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