Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用来自无显式类型转换的值表达式的输入更新列_Postgresql_Null_Sql Update - Fatal编程技术网

Postgresql 使用来自无显式类型转换的值表达式的输入更新列

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

我试图用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]错误:“订单日期”列的类型为日期,但表达式为 文本类型
提示:您需要重写或强制转换表达式

我可以通过显式地将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

相关答案及详细解释:


多么可爱的回答!当然,您也可以在主查询中使用类型转换。@LaurenzAlbe:这样做的好处是您不需要知道实际的数据类型。只有表名和列名。(不过,提供的字符串文字必须采用兼容格式。)