Postgres, замените все целочисленные значения на NULL

#sql #postgresql #sql-function

Вопрос:

Я пытаюсь заменить все значения в столбце, где значение равно 0, на NULL

 SELECT score
REPLACE(score, 0, ISNULL)
FROM kpis
WHERE score=0
 

или

 SELECT score
REPLACE(score, 0, ISNULL)
FROM kpis
 

Но я получаю синтаксическую ошибку:

 ERROR:  syntax error at or near "REPLACE"
LINE 2: REPLACE(score, 0, ISNULL)
 

Комментарии:

1. case Вместо этого используйте выражение. (Кроме того, ЗАМЕНА предназначена для строк, а не целых чисел.)

2. Мне неясно, хотите ли вы просто вернуть значение NULL в поле ВЫБОРА или навсегда изменить значения в таблице (т. Е. Запустить ОБНОВЛЕНИЕ)

Ответ №1:

Вы можете использовать nullif() то, что функционально эквивалентно выражению CASE, но немного короче для записи.

 SELECT nullif(score, 0) as score
FROM kpis
 

Ответ №2:

Замените все значения в столбце, где значение равно 0, на NULL

 update kpis set score = NULL where score = 0;
 

Замените все целочисленные значения в столбце на NULL

 update kpis set score = NULL where score ~ '^[0-9]*


Ответ №3:

случай использования, когда

 SELECT 
case when score = 0 then null else score end as score
from kpis 
 

Ответ №4:

Вместо замены вы можете использовать NULLIF(). Ниже запрос установит оценку=null, если оценка равна 0.

 update kpis set score=NULLIF(score, 0)
 

Или вы можете просто использовать приведенный ниже запрос, как предлагает @Sas.

update kpis set score = NULL where score = 0;

Комментарии:

1. Это неправильно. coalesce() возвращает первое ненулевое значение, поэтому ваше выражение всегда будет возвращать оценку или 0 - но никогда NULL

2. Вы абсолютно правы. Я изменил свой ответ. Огромное спасибо.

3. Обратите внимание, что это приведет к обновлению всей таблицы, даже если вы не меняете счет. Лучше применить предложение WHERE, как в одном из других ответов, и в этот момент вам не понадобится ОБНУЛЕНИЕ.

Ответ №3:

случай использования, когда


Ответ №4:

Вместо замены вы можете использовать NULLIF(). Ниже запрос установит оценку=null, если оценка равна 0.


Или вы можете просто использовать приведенный ниже запрос, как предлагает @Sas.

update kpis set score = NULL where score = 0;

Комментарии:

1. Это неправильно. coalesce() возвращает первое ненулевое значение, поэтому ваше выражение всегда будет возвращать оценку или 0 — но никогда NULL

2. Вы абсолютно правы. Я изменил свой ответ. Огромное спасибо.

3. Обратите внимание, что это приведет к обновлению всей таблицы, даже если вы не меняете счет. Лучше применить предложение WHERE, как в одном из других ответов, и в этот момент вам не понадобится ОБНУЛЕНИЕ.