MySQLのNULLIF()関数とは?使い方と動作をわかりやすく解説
MySQLのNULLIF()制御フロー関数とは
MySQLのNULLIF()は制御フロー関数の一つで、2つの引数が等しい場合にはNULLを返し、等しくない場合には最初の引数を返すというシンプルな動作をします。
この関数は、特定の値をNULLに置き換えたい場合や、0除算を回避したい場合の条件分岐などに活用できる便利な関数です。
構文
NULLIF(expression1, expression2)
動作のルールは以下の通りです。
- expression1 = expression2 の場合 → NULL を返す
- expression1 ≠ expression2 の場合 → expression1 を返す
使用例
実際にNULLIF()関数を実行して、その動作を確認してみましょう。
例1:引数が同じ場合(NULLを返す)
mysql> Select NULLIF('Ram','Ram');
+---------------------+
| NULLIF('Ram','Ram') |
+---------------------+
| NULL |
+---------------------+
1 row in set (0.00 sec)両方の引数が「Ram」で同一のため、結果はNULLになります。
例2:引数が異なる場合(最初の引数を返す)
mysql> Select NULLIF('Ram','Shyam');
+-----------------------+
| NULLIF('Ram','Shyam') |
+-----------------------+
| Ram |
+-----------------------+
1 row in set (0.00 sec)引数が「Ram」と「Shyam」で異なるため、最初の引数である「Ram」がそのまま返されます。
実用的な活用シーン
NULLIF()関数は、以下のような場面で特に役立ちます。
- 0除算エラーの回避:計算式の分母が0になる可能性がある場合、
a / NULLIF(b, 0)のように記述することで、bが0のときにNULLを返させ、エラーを防げます。 - 特定の値をNULLとして扱いたい場合:空文字列やプレースホルダーの値をNULLに変換したいときに便利です。
なお、NULLIF()は内部的には CASE WHEN expression1 = expression2 THEN NULL ELSE expression1 END と同等の処理を行っており、条件分岐を簡潔に書くための省略形と考えると理解しやすいでしょう。
-
MySQLのINSERT IGNOREステートメントとは?重複データの挿入を防ぐ方法
INSERT IGNOREステートメントは、MySQLのテーブルに重複したデータが挿入されるのを防ぐために使用されます。通常のINSERT文の代わりにINSERT IGNOREコマンドを使うと、新規レコードが既存レコードと重複していなければ通常どおり挿入されますが、重複している場合はIGNOREキーワードによってMySQLがそのレコードを黙って破棄し、エラーを発生させません。 基本構文 INSERT IGNORE INTO table_name(...) ここで、table_nameは値を挿入したいテーブルの名前です。カラム名とVALUES句の指定方法は通常のINSERT文と同じです。 動作の
-
MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説
MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字