Вопрос:
У меня есть таблица с булевыми значениями (только 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 …
EDIT:
Существует также один хороший способ использования ELT:
SELECT icon_clicked, ELT(FIELD(icon_clicked,0,1),’No’,’Yes’), ELT(icon_clicked + 1, ‘No’, ‘Yes’) FROM mytable
Ответ №1
Не нужно использовать вложенный Replace или Case оператор. Попробуйте использовать IF, что намного проще
SELECT icon_clicked, IF(icon_clicked,’Yes’,’No’) FROM myTable