postgresql 使用来自VALUES表达式的输入更新列,而不使用显式类型转换

e3bfsja2  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(135)

我试图用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类型,但表达式是text类型
提示:您需要重写或强制转换表达式。
我可以通过显式地将NULL转换为date来解决这个问题,如下所示:

NULL::date

但是,有没有一种方法可以在没有显式类型转换的情况下实现这一点?

bxjv4tth

bxjv4tth1#

您可以通过从目标表复制数据类型来避免显式强制转换:

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过滤。
相关答案及详细解释:

  • 更新多行时转换NULL类型

相关问题