第一个月当运行此代码时,我一直得到这个错误:错误:CASE类型字符变化和整数无法匹配你可能会认为这不会引起问题,因为我在查询中创建了一个新列。我还想指出,我使用的是旧版本的PostgreSQL,如果这有帮助的话。
4ngedf3f1#
CASE WHEN table1.text IS NULL THEN table2.numbers::text ELSE table1.text END AS newcolumn
字符串
jv2fixgn2#
问题是您试图将table1.text和table2.numbers添加到单个列中。这两列是两种不同的数据类型。请尝试以下操作
CASE WHEN table1.text IS NULL THEN CAST(table2.numbers AS VARCHAR(50)) ELSE table1.text END AS newcolumn
bkkx9g8r3#
table2.numbers和table1.text表示的数据类型必须相同,因此在本例中,您需要将table2.numbers的值乘以CAST
table2.numbers
table1.text
CAST
drnojrws4#
试试ISNULL
ISNULL
CASE WHEN ISNULL(table1.text) = 1 THEN table2.numbers ELSE table1.text END AS newcolumn
lrpiutwd5#
我认为错误很明显--CASE语句可能使用的两个列的类型不兼容。为什么你会认为尝试使用两个不同类型的列中的值不会导致问题?你可能会在结果集中创建一个新列,但它仍然必须有一个类型,并且必须匹配所有潜在的值。在很多情况下,它可能会推断出类型,但这是有风险的,并且可能不一定是您希望它做出的选择,因此最好让它强制您做出决定。您需要修改CASE语句中的一个或其他列的类型。
5条答案
按热度按时间4ngedf3f1#
字符串
jv2fixgn2#
问题是您试图将table1.text和table2.numbers添加到单个列中。这两列是两种不同的数据类型。请尝试以下操作
字符串
bkkx9g8r3#
table2.numbers
和table1.text
表示的数据类型必须相同,因此在本例中,您需要将table2.numbers
的值乘以CAST
drnojrws4#
试试
ISNULL
字符串
lrpiutwd5#
我认为错误很明显--CASE语句可能使用的两个列的类型不兼容。
为什么你会认为尝试使用两个不同类型的列中的值不会导致问题?你可能会在结果集中创建一个新列,但它仍然必须有一个类型,并且必须匹配所有潜在的值。
在很多情况下,它可能会推断出类型,但这是有风险的,并且可能不一定是您希望它做出的选择,因此最好让它强制您做出决定。您需要修改CASE语句中的一个或其他列的类型。