我的CASE出了什么问题?

时间:2012-03-14 18:25:05

标签: sql postgresql

  

CASE WHEN table1.text IS NULL THEN table2.numbers ELSE table1.text END AS newcolumn

运行此代码时,我不断收到此错误: 错误:CASE类型字符变化且整数无法匹配

您会认为这不会导致问题,因为我在查询中创建了一个新列。我还想指出,如果有帮助,我正在使用旧版本的PostgreSQL。

5 个答案:

答案 0 :(得分:5)

问题是您正在尝试将table1.text和table2.numbers添加到单个列中。这两列是两种diff数据类型。尝试以下

CASE WHEN table1.text IS NULL THEN CAST(table2.numbers AS VARCHAR(50)) ELSE table1.text END AS newcolumn

答案 1 :(得分:4)

CASE WHEN table1.text IS NULL THEN table2.numbers::text ELSE table1.text END AS newcolumn

答案 2 :(得分:1)

table2.numberstable1.text代表的数据类型必须相同,因此在这种情况下,您需要CAST table2.numbers的值

答案 3 :(得分:0)

尝试ISNULL

CASE WHEN ISNULL(table1.text) = 1 THEN table2.numbers ELSE table1.text END AS newcolumn

答案 4 :(得分:0)

我认为错误非常明确 - CASE语句可能使用的两列类型不兼容。

为什么您认为尝试使用两列不同类型的值不会导致问题?您可能在结果集中创建了一个新列,但它仍然必须具有一个类型,并且必须匹配所有潜在值。

在很多情况下,它可能会推断出类型,但这样做有风险,可能不一定是你想要的选择,因此最好强迫你做出决定。您需要修改CASE语句中一个或另一个列的类型。