Postgresql 使用来自无显式类型转换的值表达式的输入更新列
我试图用NULL更新一个可为NULL的日期列,出于某种原因,Postgres将NULL作为文本,并给出以下错误Postgresql 使用来自无显式类型转换的值表达式的输入更新列,postgresql,null,sql-update,Postgresql,Null,Sql Update,我试图用NULL更新一个可为NULL的日期列,出于某种原因,Postgres将NULL作为文本,并给出以下错误 UPDATE tbl SET order_date = data.order_date FROM (VALUES (NULL, 100)) AS data(order_date,id) WHERE data.id = tbl.id 错误显示: [42804]错误:“订单日期”列的类型为日期,但表达式为 文本类型 提示:您需要重写或强制转换表达式 我可以通过显式地将NUL
UPDATE tbl
SET
order_date = data.order_date
FROM
(VALUES (NULL, 100))
AS data(order_date,id)
WHERE data.id = tbl.id
错误显示:
[42804]错误:“订单日期”列的类型为日期,但表达式为
文本类型提示:您需要重写或强制转换表达式 我可以通过显式地将NULL转换为date来解决此问题,如下所示:
NULL::date
但是,有没有一种方法可以在不进行显式类型转换的情况下实现这一点?您可以通过从目标表复制数据类型来避免显式强制转换:
UPDATE tbl
SET order_date = data.order_date
FROM (
VALUES
((NULL::tbl).order_date, (NULL::tbl).id)
(NULL, 100)
) data(order_date, id)
WHERE data.id = tbl.id;
添加的空值虚拟行由过滤,其中data.id=tbl.id
相关答案及详细解释: