先日 MySQL の文字列結合(CONCAT)で少しハマったのでメモ。
mysql> select * from addresses;
+----+-----------------+-----------+---------------------+
| id | prefecture_name | city_name | other |
+----+-----------------+-----------+---------------------+
| 1 | 東京都 | 港区 | NULL |
| 2 | 東京都 | NULL | ほげほげ1丁目 |
| 3 | NULL | 札幌市 | ほげほげ2丁目 |
| 4 | 沖縄県 | 那覇市 | ほげほげ3丁目 |
+----+-----------------+-----------+---------------------+
4 rows in set (0.00 sec)
このデータで住所を連結して表示するため安直に concat を使います
mysql> select id, concat(prefecture_name, city_name, other) as address from addresses;
+----+---------------------------------------+
| id | address |
+----+---------------------------------------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | 沖縄県那覇市ほげほげ3丁目 |
+----+---------------------------------------+
4 rows in set (0.00 sec)
NULL なカラムがあると、連結結果も NULL となってしまいます。concat ってそもそも文字列結合なので NULL 文字列を想定していないのも頷けます。VARCHAR, TEXT などの文字列型のカラムに対して Nullable に設定するのは良くないのかもしれません。
NULL なカラムがあると文字列結合結果が NULL になる問題を解決するために、IFNULL で NULL チェックをして、 NULL の場合は "" 空文字列で置換する処理を入れます。
mysql> select id, concat(ifnull(prefecture_name,""), ifnull(city_name,""), ifnull(other,"")) as address from addresses;
+----+---------------------------------------+
| id | address |
+----+---------------------------------------+
| 1 | 東京都港区 |
| 2 | 東京都ほげほげ1丁目 |
| 3 | 札幌市ほげほげ2丁目 |
| 4 | 沖縄県那覇市ほげほげ3丁目 |
+----+---------------------------------------+
4 rows in set (0.00 sec)
NULL が "" に置換されたため、意図した結合結果になりました。
mac に pip をインストールする
mac は標準で python が入っていますが、パッケージ管理の pip がインストールされていないので入れてみました。
2017/05/26 09:00
[GAS] Google Drive の特定フォルダ配下のフォルダ・ファイルの権限を一括で移譲する
Google Drive の特定フォルダ配下のファイル・フォルダの権限を一括で移譲するツールを Google Apps Script で作りました。
2018/11/10 15:54
[Windows] Ophcrack を使ってユーザーパスワードを解析する方法
家族で使っていた Windows7 のログインパスワードを忘れたため、Ophcrack を使って解析したときの記録です。
2017/09/30 21:00
[shell] フォルダ内にある大量の ZIP ファイルをまとめて解凍する
とある ZIP を解凍すると中に大量の ZIP が居たときに幸せになれるコマンドを紹介します
2018/06/19 23:45
[MySQL] データファイルから DB を復元する
先日 MySQL が再起動できなくなる問題が発生し、急遽データファイル(.frm, .ibd)から復元しました
2018/11/25 12:44