使用普遍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() 返回字符串/varchar ?
如果您始终对字符串常量使用单引号,这是否固定?
(CASE l."Position"
WHEN 3 THEN 'PIC'
WHEN 4 THEN 'SIC'
WHEN 22 THEN 'FA'
ELSE ''
END) AS "Position"
另一种可能性是您应该将新列命名为不同的名称,例如 Position_Name
。 如果您在查询中选择"位置"本身,则两者可能会混淆。
官方文档中的示例,这似乎不会导致问题
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 语句本身,而在于 Position 是您的列名的 TINYINT 数据类型的As Position
部分。您应该考虑使用与列名不同的别名。