如何使用REPLACE()替换mysql SELECT查询中的1列中的多个值?

时间:2015-12-28 16:42:12

标签: mysql sql replace

我有一个表格,其中包含布尔值(仅限0和1),需要对客户端进行CSV格式化。我知道我可以做这样的替换:

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列,电子邮件,名称,icon_clicked->是,icon_clicked-> no)

2 个答案:

答案 0 :(得分:7)

一种方法是嵌套REPLACE

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

或使用CASE WHEN(这与大多数RDBMS相比,与MySQL相关的IF函数相比):

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

答案 1 :(得分:3)

无需使用嵌套的ReplaceCase语句。尝试使用IF,这更简单

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