CASE WHEN table1.text IS NULL THEN table2.numbers ELSE table1.text END AS newcolumn
运行此代码时,我不断收到此错误: 错误:CASE类型字符变化且整数无法匹配
您会认为这不会导致问题,因为我在查询中创建了一个新列。我还想指出,如果有帮助,我正在使用旧版本的PostgreSQL。
答案 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.numbers
和table1.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语句中一个或另一个列的类型。