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