Обновление столбца с вводом из выражения VALUES без явного приведения типа - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь обновить столбец дат с нулевым значением 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 в дату, как показано ниже:

NULL::date

Но есть ли способ добиться этого без явного преобразования типов?

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете избежать явного приведения, скопировав типы данных из целевой таблицы:

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.

Связанный ответ сподробное объяснение:

...