使用来自VALUES表达式的输入更新列,而无需显式类型强制转换

时间:2018-10-24 01:07:11

标签: postgresql null sql-update

我正在尝试使用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

但是,有没有一种方法无需显式的类型转换?

1 个答案:

答案 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过滤。

相关答案以及详细说明: