Postgres: использовать NULLIF внутри запроса с "WITH data" - PullRequest
0 голосов
/ 11 января 2019

Я ищу способ вставить NULL в пустую строку для поля agency_id с помощью этого запроса:

WITH data(email, agency_id, address, city, zipcode) AS (
    VALUES ('email@domain.tld', '', 'My Address', 'My City', 'My Zipcode')
)

INSERT INTO customers (email, agency_id)
SELECT email, NULLIF(agency_id, '') FROM data

В этом запросе agency_id должно быть NULL, но при этом способ не работает. Я хотел бы использовать NULLIF где-нибудь.

1 Ответ

0 голосов
/ 11 января 2019

У вас есть проблема с преобразованием типов, в данном случае от VARCHAR до INT. Если ваш стол:

CREATE TABLE customers (
    email text NOT NULL,
    agency_id integer NULL
);

Вам необходимо конвертировать:

  • Значение '' до null.
  • Числовое значение в текстовой форме, например от '123' (varchar) до 123 (int).

Будет работать следующий запрос:

WITH data(email, agency_id, address, city, zipcode) AS (
    VALUES ('email@domain.tld', '', 'My Address', 'My City', 'My Zipcode')
)
INSERT INTO customers (email, agency_id)
SELECT email, 
  case when agency_id = '' then null
       else agency_id::int
  end 
FROM data;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...