我有一个表格,其中包含布尔值(仅限0和1),需要对客户端进行CSV格式化.我知道我可以做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;
但是这个查询为'No'字符串替换创建了一个额外的列(所以最终结果有4列,email,name,icon_clicked-> yes,icon_clicked-> no)
一种方法是嵌套REPLACE
:
SELECT REPLACE(REPLACE(icon_clicked, 0, 'No'), 1, 'Yes')), ... FROM myTable ...
或者使用CASE WHEN
(这与大多数RDBMS相比,IF
与MySQL相关的功能相比):
SELECT CASE WHEN icon_clicked THEN 'Yes' ELSE 'No' END, ... FROM myTable ...
SqlFiddleDemo
编辑:
还有一个好方法ELT
:
SELECT icon_clicked, ELT(FIELD(icon_clicked,0,1),'No','Yes'), ELT(icon_clicked + 1, 'No', 'Yes') FROM mytable
SqlFiddleDemo2