2015-12-28 12 views
5

Mam tabelę z wartościami logicznymi (tylko 0 i 1), które muszą być CSV-ed dla klienta. Wiem, że mogę zrobić 1 zastąpić tak:Jak zamienić wiele wartości w 1 kolumnie w zapytaniu SELECT mysql za pomocą REPLACE()?

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

To przekonwertuje wszystkie wartości 1 do „tak”, ale jak to zrobić w jednym zapytaniu zarówno 1 => Tak, a 0 => Nie więc wynik Boolean jest przechowywany w pojedynczej kolumnie? Próbowałem to zrobić:

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

Ale ta kwerenda stworzył dodatkową kolumnę na 'nie' ciąg zastąpić (wynik końcowy więc miał 4 kolumny, e-mail, imię i nazwisko, icon_clicked-> tak, icon_clicked-> no)

Odpowiedz

6

Jednym ze sposobów jest gniazdo REPLACE:

SELECT REPLACE(REPLACE(icon_clicked, 0, 'No'), 1, 'Yes')), ... 
FROM myTable 
... 

lub użyj CASE WHEN (będzie to działać dla większości RDBMS porównywanie do IF funkcji, która jest MySQL pokrewne):

SELECT CASE WHEN icon_clicked THEN 'Yes' ELSE 'No' END, ... 
FROM myTable 
... 

SqlFiddleDemo

EDIT:

Jest też jeden dobry sposób, wykorzystując ELT:

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

SqlFiddleDemo2

+0

Nie wiedziałem o 'CASE' rzeczy. Dzięki ! – Seblor

+0

Pierwszy działał idealnie –

2

Nie trzeba używać zagnieżdżonej instrukcji Replace lub Case. Spróbuj użyć IF, który jest sposobem wdzięczyć

SELECT 
    icon_clicked, 
    IF(icon_clicked,'Yes','No') 
FROM myTable 
Powiązane problemy