MySQL 替換查詢結果中的null或特定字元

2021-09-02 05:36:33 字數 2725 閱讀 9747

偶爾會遇到有人問,表裡某個列存在null值,查詢結果集裡想要把null替換成特定的字元,怎麼做?

看到有人寫了各種各樣比較複雜的sql,其實在mysql裡只要乙個函式就能搞定,那就是ifnull,長話短說,看例子:

--將結果集中的null替換成'空'

mysql> select id from test;

+------+

| id |

+------+

| 1 |

| 2 |

| null |

+------+

3 rows in set (0.00 sec)

mysql> select ifnull(id,'空') from test;

+------------------+

| ifnull(id,'空') |

+------------------+

| 1 |

| 2 |

| 空 |

+------------------+

3 rows in set (0.00 sec)

那麼,如果想要替換並不是null,而是特定的字元呢,例如1替換成』man』,這時,可以用case when語法實現,看例子:

--將結果集中的1替換成『男』

mysql> select * from test;

+------+------+

| id | id2 |

+------+------+

| 1 | 1 |

| 2 | 2 |

| null | 3 |

+------+------+

3 rows in set (0.00 sec)

mysql> select case id

-> when 1 then 'man'

-> else id

-> end id

-> from test;

+------+

| id |

+------+

| man |

| 2 |

| null |

+------+

3 rows in set (0.00 sec)

那麼,如果我要替換的並不單單是乙個特定的字元,而是多個呢?例如1替換』man』,2替換成』women』。這時有兩個辦法,乙個是仍然利用case when實現,另乙個是建立乙個字典表,通過關聯查詢來實現替換。看例子:

1.case when

--將結果中的1替換成'man',2替換成'women'

mysql> select * from test;

+------+------+

| id | id2 |

+------+------+

| 1 | 1 |

| 2 | 2 |

| null | 3 |

+------+------+

3 rows in set (0.00 sec)

mysql> select case id

-> when 1 then 'man'

-> when 2 then 'women'

-> else id

-> end id

-> from test;

+-------+

| id |

+-------+

| man |

| women |

| null |

+-------+

3 rows in set (0.00 sec)

2.字典表

--建立字典表dict,指定字元對應關係

mysql> select * from dict;

+------+-------+

| id | *** |

+------+-------+

| 1 | man |

| 2 | women |

+------+-------+

2 rows in set (0.00 sec)

mysql> select id from test;

+------+

| id |

+------+

| 1 |

| 2 |

| null |

+------+

3 rows in set (0.00 sec)

--源表與字典表關聯,查出對應關係,實現替換效果

mysql> select a.id,b.*** from test a left join dict b on a.id=b.id;

+------+-------+

| id | *** |

+------+-------+

| 1 | man |

| 2 | women |

| null | null |

+------+-------+

3 rows in set (0.00 sec)

case when和字典表各有優點,case when編寫簡單明瞭,字典表方便修改替換對應關係。

mysql中join的查詢結果中出現null欄位

join 使用來連線多表字段進行查詢,分為3中情況 inner join,left join,right join inner join 取得兩個表中匹配的資料 left join 取得左表 left join左邊的表 中的全部資料和右表的匹配資料 right join 取得右表中的全部資料和左表的...

iBatis 動態SQL別名查詢結果為Null問題

在專案中使用了ibatis,使用xml方便的維護sql,清晰明了,偶然發現動態拼接的sql語句在資料中執行很好的返回結果,而到了程式中總是有欄位返回null值,跟在資料庫中執行的結果不一致 id getuser parameterclass searchmodel resultclass usert...

mysql得到查詢結果的同時統計查詢結果的數目

做一些資料庫查詢,不僅希望得到要查詢的結果,還希望方便地統計一下查詢結果中有多少條記錄。我通常的做法是 q select from fromtable where where limit start,pagesize r mysql query q q select count from fromt...