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