MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのIFNULL()関数を使ってNULL値を含む日付レコードを並べ替える方法

IFNULL()関数でNULL値の日付を扱う

MySQLでは、IFNULL()関数を使用することで、NULL値を別の値に置き換えて処理できます。この関数は、第1引数がNULLでなければその値を返し、NULLであれば第2引数の代替値を返します。

本記事では、updated_dateがNULLの場合にadded_dateの値を代わりに使い、レコードを昇順・降順に並べ替える方法を具体的なサンプルコードとともに解説します。

ステップ1:サンプルテーブルを作成する

まず、テーブルを作成しましょう。

mysql> create table DemoTable
   -> (
   -> added_date date,
   -> updated_date date
   -> );
Query OK, 0 rows affected (0.95 sec)

ステップ2:レコードを挿入する

INSERT文を使って、いくつかのレコードをテーブルに挿入します。意図的にNULL値を含むデータも用意しています。

mysql> insert into DemoTable values('2019-01-10','2019-06-01');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('2019-05-19',NULL);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(NULL,'2019-09-05');
Query OK, 1 row affected (0.18 sec)

ステップ3:テーブル内の全レコードを表示する

SELECT文で、登録されたすべてのレコードを確認します。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| 2019-01-10 | 2019-06-01   |
| 2019-05-19 | NULL         |
| NULL       | 2019-09-05   |
+------------+--------------+
3 rows in set (0.00 sec)

ケース1:降順(DESC)で並べ替える場合

updated_dateがNULLのレコードはadded_dateの値で代用しながら、結果を降順で取得したい場合は、以下のクエリを実行します。

mysql> select *from DemoTable order by ifnull(updated_date,added_date) desc;

実行結果は以下の通りです。updated_dateがNULLの「2019-05-19」の行は、added_dateの値がソートに使われていることがわかります。

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| NULL       | 2019-09-05   |
| 2019-01-10 | 2019-06-01   |
| 2019-05-19 | NULL         |
+------------+--------------+
3 rows in set (0.00 sec)

ケース2:昇順(ASC)で並べ替える場合

逆に、結果を昇順で取得したい場合は、DESCを外した以下のクエリを使用します。

mysql> select *from DemoTable order by ifnull(updated_date,added_date);

実行結果は以下の通りです。

+------------+--------------+
| added_date | updated_date |
+------------+--------------+
| 2019-05-19 | NULL         |
| 2019-01-10 | 2019-06-01   |
| NULL       | 2019-09-05   |
+------------+--------------+
3 rows in set (0.00 sec)

まとめ

IFNULL(updated_date, added_date)のように記述することで、updated_dateがNULLの場合には自動的にadded_dateの値がソートキーとして使用されます。この手法は、更新日が未設定のレコードを登録日に基づいて正しく並べ替えたい場合など、実務でも非常に役立ちます。同様の目的にはCOALESCE()関数も利用できるため、状況に応じて使い分けるとよいでしょう。

  1. MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法

    MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1      (      DueDate date      ); Query OK, 0 ro

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ