我有一个包含布尔值(仅限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_cricked->No)
一种方法是嵌套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
无需使用嵌套的Replace
或Case
语句。尝试使用IF,这是一种更简单的
SELECT
icon_clicked,
IF(icon_clicked,'Yes','No')
FROM myTable
- SQL FIDDLE演示