Как заменить несколько значений в 1 столбце в запросе SELECT mysql с помощью REPLACE()?

Вопрос:У меня есть таблица с булевыми значениями (только 0 и 1), которые должны быть CSV-ed для клиента. Я знаю, что могу сделать 1 заменить следующим образом: SELECT REPLACE(email, '%40', '@'), REPLACE(name,'%20', ' '), REPLACE(icon_clicked, 1, 'Yes') FROM myTable WHERE id > 1000; Это преобразует все значения 1 в "Да", но как это сделать в одном

Вопрос:

У меня есть таблица с булевыми значениями (только 0 и 1), которые должны быть CSV-ed для клиента. Я знаю, что могу сделать 1 заменить следующим образом:

SELECT REPLACE(email, ‘%40’, ‘@’), REPLACE(name,’%20′, ‘ ‘), REPLACE(icon_clicked, 1, ‘Yes’) FROM myTable WHERE id > 1000;

Это преобразует все значения 1 в “Да”, но как это сделать в одном запросе для 1 = > Да и 0 = > Нет, поэтому логический результат сохраняется в одном столбце? Я попытался сделать это:

SELECT REPLACE(email, ‘%40’, ‘@’), REPLACE(name,’%20′, ‘ ‘), REPLACE(icon_clicked, 1, ‘Yes’), REPLACE(icon_clicked, 0, ‘No’) FROM myTable WHERE id > 1000;

Но этот запрос создал дополнительный столбец для замены строки “Нет” (так что конечный результат состоял из 4 столбцов, email, name, icon_clicked- > yes, icon_clicked- > no)

Лучший ответ:

Один из способов – вложить REPLACE:

SELECT REPLACE(REPLACE(icon_clicked, 0, ‘No’), 1, ‘Yes’)), … FROM myTable …

или используйте CASE WHEN (это будет работать для большинства СУРБД по сравнению с функцией IF, которая связана с MySQL):

SELECT CASE WHEN icon_clicked THEN ‘Yes’ ELSE ‘No’ END, … FROM myTable …

SqlFiddleDemo

EDIT:

Существует также один хороший способ использования ELT:

SELECT icon_clicked, ELT(FIELD(icon_clicked,0,1),’No’,’Yes’), ELT(icon_clicked + 1, ‘No’, ‘Yes’) FROM mytable

SqlFiddleDemo2

Ответ №1

Не нужно использовать вложенный Replace или Case оператор. Попробуйте использовать IF, что намного проще

SELECT icon_clicked, IF(icon_clicked,’Yes’,’No’) FROM myTable

Оцените статью
Добавить комментарий