列是布尔类型,但表达式是文本类型 提示:您需要重写或强制转换表达式

Posted

技术标签:

【中文标题】列是布尔类型,但表达式是文本类型 提示:您需要重写或强制转换表达式【英文标题】:Column is of type Boolean but expression is of type text Hint: You will need to rewrite or cast the expression 【发布时间】:2016-06-10 20:39:50 【问题描述】:

谁能帮我解决这个错误?

Update table 
SET
tentative = case src.tentative 
WHEN 1 THEN 't' ELSE 'f' END
FROM table 

【问题讨论】:

您的具体问题是什么? 我正在尝试更新列。 Tentative 是布尔类型,但在源端它是 varchar。我在投射时遇到了这个问题。 您似乎正在尝试从布尔值转换为字符...您是否打算这样做WHEN 't' THEN 1 ELSE 0 END 【参考方案1】:

您的专栏tentativeBOOLEAN 类型;但是,您正在尝试使用 TEXT 类型值对其进行更新。

您需要做的就是在更新中使用BOOLEAN,如下所示:

UPDATE table 
SET tentative = CASE src.tentative WHEN 1 THEN TRUE ELSE FALSE END
FROM src_table src;

或者,您可以这样做,但可能不太明显:

UPDATE table 
SET tentative = (src.tentative = 1)
FROM src_table src;

【讨论】:

't' 和 'f' 是 TRUE 和 FALSE 的有效文字

以上是关于列是布尔类型,但表达式是文本类型 提示:您需要重写或强制转换表达式的主要内容,如果未能解决你的问题,请参考以下文章

错误:列是 json 类型,但表达式在 Hibernate 中是不同的字符类型

将文本格式化为数字的 SQLplus 脚本

java 中 一般打印对象不都是需要重写toString()方法吗?

布尔类型是啥意思?

引起:org.postgresql.util.PSQLException:错误:列“imagesync__c”的类型为布尔值,但表达式的类型为字符变化

在预期条件的上下文中指定的非布尔类型的表达式,靠近 IDT 中的“)”错误