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

MySQLで入力がNULLの場合にDATE_FORMATからNULLを返す方法

MySQLで入力がNULLの場合にDATE_FORMATからNULLを返す方法

MySQLでは、IF()関数を組み合わせることで、日付カラムの値がNULLの場合にDATE_FORMAT関数の結果としてNULLを返すことができます。NULLデータを含むテーブルでも、意図どおりに日付を安全にフォーマットできる便利なテクニックです。

基本構文

構文は以下のとおりです。

SELECT IF(対象の日付カラム, DATE_FORMAT(対象の日付カラム, '%d/%m/%Y'), NULL) FROM テーブル名;

IF()関数は、第1引数の条件が真(NULL以外の有効な値)であれば第2引数を返し、条件が偽またはNULLであれば第3引数を返します。つまり、日付カラムがNULLなら、そのままNULLが結果として返される仕組みです。

サンプルテーブルの作成

実際の動きを確認するため、まずテーブルを作成しましょう。テーブル作成のクエリは次のとおりです。

mysql> create table returnNullWhenInputIsNullDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ShippingDate datetime
-> );
Query OK, 0 rows affected (1.21 sec)

ここでは、配送日を格納するdatetime型のカラム「ShippingDate」を持つテーブルを用意しました。

テストデータの挿入

続いて、INSERTコマンドでレコードを挿入します。動作を検証できるよう、あえてNULLの行も混ぜて登録します。

mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values('2019-01-21');
Query OK, 1 row affected (0.37 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values(NULL);
Query OK, 1 row affected (0.16 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values('2018-03-25');
Query OK, 1 row affected (0.17 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values(NULL);
Query OK, 1 row affected (0.17 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values(NULL);
Query OK, 1 row affected (0.10 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values('2012-04-23');
Query OK, 1 row affected (0.20 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values('2018-12-01');
Query OK, 1 row affected (0.23 sec)
mysql> insert into returnNullWhenInputIsNullDemo(ShippingDate) values('2016-11-13');
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from returnNullWhenInputIsNullDemo;

実行結果は以下のとおりです。NULLの行が混在しているのがわかります。

+----+---------------------+
| Id | ShippingDate |
+----+---------------------+
| 1 | 2019-01-21 00:00:00 |
| 2 | NULL |
| 3 | 2018-03-25 00:00:00 |
| 4 | NULL |
| 5 | NULL |
| 6 | 2012-04-23 00:00:00 |
| 7 | 2018-12-01 00:00:00 |
| 8 | 2016-11-13 00:00:00 |
+----+---------------------+
8 rows in set (0.00 sec)

IF()関数を使ってNULLを返すクエリを実行

それでは、入力がNULLの場合にDATE_FORMATの結果としてNULLを返すクエリを実行してみます。

mysql> SELECT IF(ShippingDate, date_format(ShippingDate, '%d/%m/%Y'), NULL) FROM returnNullWhenInputIsNullDemo;

出力結果は次のとおりです。日付が存在する行は「日/月/年」の形式で整形され、NULLの行はそのままNULLとして表示されています。

+-------------------------------------------------------------+
| IF(ShippingDate,date_format(ShippingDate, '%d/%m/%Y'),NULL) |
+-------------------------------------------------------------+
| 21/01/2019 |
| NULL |
| 25/03/2018 |
| NULL |
| NULL |
| 23/04/2012 |
| 01/12/2018 |
| 13/11/2016 |
+-------------------------------------------------------------+
8 rows in set (0.05 sec)

補足:IFNULL()やCOALESCE()を使う代替方法

同じ目的には、IFNULL()やCOALESCE()を活用する方法もあります。特に、NULLのときに「未設定」などの任意の文字列を表示したい場合は、次のように記述すると便利です。

SELECT IFNULL(date_format(ShippingDate, '%d/%m/%Y'), '未設定') FROM returnNullWhenInputIsNullDemo;

このように、NULL時の扱いを明示的に制御することで、アプリケーション側での表示処理をシンプルにでき、データの一貫性も保ちやすくなります。用途に応じてIF()・IFNULL()・COALESCE()を使い分けてみてください。

  1. MySQLでNOT NULLの値に対して1を設定する方法(IF関数とIS NOT NULLの使い方)

    MySQLでNOT NULLの値に1を設定するにはMySQLでは、IS NOT NULL演算子とIF()関数を組み合わせることで、値がNULLでない場合に「1」、NULLの場合に「0」を返すことができます。データの存在チェックやフラグ管理など、さまざまな場面で活用できる便利なテクニックです。基本構文NOT NULLかどうかを判定して1を設定する基本構文は以下のとおりです。select if( is not NULL,1,0) as anyAliasName;実際に動作するクエリを見てみましょう。mysql> select if( is not NULL,1,0);このクエリを実行すると、

  2. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを