#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, как в одном из других ответов, и в этот момент вам не понадобится ОБНУЛЕНИЕ.