我正在尝试使用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]错误:“ order_date”列的类型为date,但表达式为 类型为文字
提示:您将需要重写或强制转换表达式。
我可以通过将NULL显式转换为日期来解决此问题,如下所示:
NULL::date
但是,有没有一种方法无需显式的类型转换?
答案 0 :(得分:3)
您可以通过从目标表中复制数据类型来避免显式转换:
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;
添加的具有NULL值的虚拟行由WHERE data.id = tbl.id
过滤。
相关答案以及详细说明: