使用普及型SQL数据库,我有一个复杂的SQL SELECT语句,其中包含以下内容:
CASE l."Position"
WHEN 3 THEN "PIC"
WHEN 4 THEN "SIC"
WHEN 22 THEN "FA"
ELSE ''
END AS "Position"
l."Position"
作为TINYINT存储在数据库中。显然,我正在尝试返回一个字符串-基本上是将数字代码转换为易于理解的标签。但是该列中的结果始终为0
,因为(显然)它输出一个整数字段,并且当转换为数字时“ PIC”(例如)为0。如果我将其更改为...
CASE l."Position"
WHEN 3 THEN 123
WHEN 4 THEN 456
WHEN 22 THEN 789
ELSE ''
END AS "Position"
...它按预期返回三位数,所以我知道Case本身运行正常。
如何告诉Case()返回字符串/ varchar?
答案 0 :(得分:1)
如果您始终在字符串常量中使用单引号,是否可以解决此问题?
(CASE l."Position"
WHEN 3 THEN 'PIC'
WHEN 4 THEN 'SIC'
WHEN 22 THEN 'FA'
ELSE ''
END) AS "Position"
另一种可能性是您应该为新列命名一个不同的名称,例如Position_Name
。如果您在查询中选择“位置”本身,那么两者可能会混淆。
答案 1 :(得分:0)
示例from the official documentation,看来这不会引起问题
SELECT last_name, first_name, CASE WHEN scholarship = 1 THEN 'Scholastic' WHEN citizenship <> 'United States' THEN 'Foreign Study' WHEN (date_of_birth >= '1960-01-01' AND date_of_birth <= '1970-01-01') THEN 'AJ-44 Funds' ELSE 'NONE' END AS 'Funding Program' FROM Person ORDER BY last_name
其结果是,问题不在CASE语句本身中,而在As Position
部分中,其中Position是您的TINYINT数据类型的列名。您应该考虑使用与列名不同的别名。