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

Posted

技术标签:

【中文标题】如何使用 REPLACE() 替换 mysql SELECT 查询中 1 列中的多个值?【英文标题】:How to replace multiple values in 1 column in mysql SELECT query using REPLACE()? 【发布时间】:2016-04-02 12:36:42 【问题描述】:

我有一个包含布尔值(仅 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;

但此查询为“否”字符串替换创建了一个附加列(因此最终结果有 4 列,电子邮件、名称、icon_clicked->yes、icon_clicked->no)

【问题讨论】:

【参考方案1】:

一种方法是嵌套REPLACE

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

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

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

【讨论】:

【参考方案2】:

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

SELECT 
   icon_clicked,
   IF(icon_clicked,'Yes','No')
FROM myTable
SQL FIDDLE DEMO

【讨论】:

以上是关于如何使用 REPLACE() 替换 mysql SELECT 查询中 1 列中的多个值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用REPLACE和正则表达式替换MYSQL中字符串中的多个关键字[重复]

Mysql 常用函数- replace 函数

Mysql 常用函数- replace 函数

js的replace如何全部替换目标字符串

js的replace如何全部替换目标字符串

如何用regexp_replace在mysql中用特定字符替换多个字符?