SQL DB2 Заменить значение в столбце - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть следующий столбец, B представляет логическое значение, а остальные являются пустыми значениями.Я должен изменить все значения в этом столбце на слово COLUMN A.

  COLUMN
  -----


   B

Я пробовал разные вещи, например

 SELECT COLUMN 
 FROM TABLE
 WHERE COALESCE(NULLIF(COLUMN,''), 'COLUMN A');

И я получаю сообщение об ошибке: «Неверныйсимвол, найденный в аргументе символьной строки функции "BOOLEAN". "Я вроде застрял в этом вопросе, и я путаюсь с этим логическим значением.Я буду очень рад, если кто-то может мне помочь, спасибо!

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Самое простое - использовать выражение CASE.Я не знаком с db2, поэтому вы можете изучить его дальше, но в других СУБД он работает следующим образом:

ВЫБЕРИТЕ СЛУЧАЙ ПРИ КОЛОННЕ = '' THEN 'COLUMN A' - если COLUMN = ''замените его на «COLUMN A», иначе выберите COLUMN, как есть.END as 'COLUMN' - назовите столбец в результате 'COLUMN' FROM TABLE

Эта статья объясняет, как она работает в db2: https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/sqlref/src/tpc/db2z_caseexpression.html

0 голосов
/ 17 ноября 2018

Предложение WHERE не завершено. Сравните значение COALESCEd с чем-то:

SELECT COLUMN 
 FROM TABLE
 WHERE COALESCE(NULLIF(COLUMN,''), 'COLUMN A') = 'COLUMN A';

Или лучше:

SELECT COLUMN 
 FROM TABLE
 WHERE COLUMN IS NULL OR COLUMN = ''

Не требует размышлений / расчетов для отработки логики выбора. Более удобен в обслуживании, приятнее для равных разработчиков

* Выше приведен общий совет для обычных случаев, НЕ связанных с булевыми типами данных (которые обычно требуют другого подхода)


Теперь вы говорите, что должны изменить значение на что-то. Для этого требуется оператор UPDATE. Если этот столбец логический, он не будет иметь значение пустой строки. Пробелы будут нулевыми:

UPDATE TABLE SET COLUMN = (some boolean) WHERE COLUMN IS NULL

Если вы не хотите постоянно изменять данные таблицы на что-то, а вместо этого хотите выбрать их в качестве некоторого значения, где возникает пробел, но сохраните пробелы в таблице:

SELECT COALESCE(column, (some boolean)) FROM TABLE

Стоит отметить, что не все версии DB2 могут возвращать логическое значение в наборе результатов - это довольно типично для поставщиков баз данных. Преобразуйте логическое значение во что-то еще представимое, используя случай, когда, таким образом, ваша версия DB2 ограничена

SELECT CASE WHEN column = TRUE THEN 'true' ELSE 'false' END FROM TABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...