1

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

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

4

2 回答 2

3

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

SELECT [Level] = 
Case t.[Level]
    WHEN 0 THEN ' '
    ELSE CONVERT(VARCHAR(3), t.[Level])
END
FROM table t 
于 2012-08-09T13:52:46.290 回答
1

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

SELECT 
[Level] = 
Case 
t.[Level]
    WHEN 0 THEN ''
    ELSE CAST(t.[Level] AS VARCHAR(10))
END
FROM table t 
于 2012-08-09T13:51:12.653 回答