Изменить значение столбца из оператора select - PullRequest
0 голосов
/ 09 ноября 2019

Мне нужно изменить значение, возвращаемое оператором select. В настоящее время, когда я выбираю определенный столбец, возвращается значение «1», «2» или NULL. Я хотел бы вернуть другое значение вместо «1» и «2», например «18». Я пытался использовать функцию translate безрезультатно. Как это сделать с postgresql?

В настоящее время пытался:

.select("concat_ws(', ', translate(e110618, '12', '18'), e110717, e110519)") 

Когда я удаляю перевод, он работает, но вывод (1,2,1) не то, что мне нужно.

1 Ответ

1 голос
/ 09 ноября 2019

Я не думаю, что translate() действительно то, что вам нужно. Он выполняет поиск / замену на основе символов, в то время как вы, похоже, ищете соответствие всей строке.

Вместо этого вы можете использовать выражение case. Это стандартный SQL, который работает в большинстве СУБД.

case when e110618 in ('1', '2') then 18 else e110618 end

Если единственным возможным значением, отличным от 1 и 2, является null, то это можно упростить, поскольку case возвращает null по умолчанию:

case when e110618 in ('1', '2') then 18 end

Примечание: если e110618 является числовым типом данных (а не строкой), то вы должны удалить одинарные кавычки вокруг 1 и 2.

В вашем коде:

select(
    "concat_ws(', ', case when e110618 in ('1', '2') then 18 end, e110717, e110519)"
) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...