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

SQL Case() casts results as integer

使用 Pervasive 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 存储在数据库中。显然,我正在尝试 return 一个字符串——基本上是将数字代码转换为可理解的标签。但是该列中的结果始终是 0 因为(显然)它正在输出一个整数字段并且 "PIC" (例如)在转换为数字时为 0。如果我将其更改为...

    CASE l."Position"
        WHEN 3 THEN 123
        WHEN 4 THEN 456
        WHEN 22 THEN 789
        ELSE ''
    END AS "Position"

...它 return 是预期的三位数,所以我知道 Case 本身工作正常。

如何告诉 Case() 到 return a string/varchar?

如果您在整个字符串常量中使用单引号,这个问题是否得到解决?

(CASE l."Position"
     WHEN 3 THEN 'PIC'
     WHEN 4 THEN 'SIC'
     WHEN 22 THEN 'FA'
     ELSE ''
 END) AS "Position"

另一种可能是您应该为新列命名一个不同的名称,例如 Position_Name。如果您在查询中选择 "Position" 本身,那么两者可能会混淆。

示例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 数据类型的列名。您应该考虑使用与您的列名不同的别名。