偶爾會遇到有人問,表裡某個列存在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...