2015-12-28 3 views
5

Ich habe eine Tabelle mit booleschen Werten (nur 0 und 1), die an einen Client per CSV gesendet werden müssen. Ich weiß, ich kann wie folgt 1 ersetzen tun:Wie ersetzt man mehrere Werte in 1 Spalte in mysql SELECT Abfrage mit REPLACE()?

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

Diese alle Werte von 1 bis ‚Ja‘ konvertieren, aber wie diese in einer einzigen Abfrage zu tun, sowohl für 1 => Ja und 0 => Nein Also Boolesches Ergebnis wird in einer einzigen Spalte gespeichert? Ich habe versucht, dies zu tun:

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

Aber diese Abfrage erstellt eine zusätzliche Spalte für die 'Nein' Zeichenfolge ersetzen (so Endergebnis hatte 4 Spalten, E-Mail, Name, icon_clicked-> ja, icon_clicked-> no)

Antwort

6

Eine Möglichkeit ist, zu nisten REPLACE:

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

oder verwenden CASE WHEN (dies wird für die meisten RDBMS arbeiten, um IF Funktion zu vergleichen, die ist MySQL bezogen):

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

SqlFiddleDemo

EDIT:

Es gibt auch eine nette Art und Weise unter Verwendung ELT:

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

SqlFiddleDemo2

+0

ich über die 'CASE' Sache nicht wusste, Art und Weise simper ist. Vielen Dank ! – Seblor

+0

Das erste funktionierte perfekt –

2

Keine verschachtelte Replace oder Case Anweisung erforderlich. Versuchen Sie IF mit, die

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