SQL Case() 将结果转换为整数



使用普遍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部分。您应该考虑使用与列名不同的别名。

相关内容

  • 没有找到相关文章

最新更新