ISNULL()、NVL()、IFNULL()、または COALESCE() と同等の SQLite
-
SQLite データベースで
NULL値を持つレコードをフェッチする -
THENとELSEを使用して、SQLite データベースのNULL値を確認する -
SQLite データベースで
COALESCE()関数を使用する -
SQLite データベースで
NVL()関数を使用する -
COALESCE()関数とifnull()関数の違い -
COALESCE()関数とisnull()関数の違い
SQLite は、データベースからレコードを作成、読み取り、更新、および削除するために使用されます。 データベースには、データを維持するためのさまざまなテーブルが含まれています。
各テーブルは、レコードを保持する行と列で構成されます。 これらのレコードには多くの場合、空または null の値が含まれているため、データの取得中に問題やエラーが発生します。
SQLite データベースで NULL 値を持つレコードをフェッチする
SQLite データベースからレコードを取得するには、SQLite ステートメントで SELECT 句を使用します。 SELECT ステートメントも NULL 値をフェッチして無視し、値のみを持つレコードをフェッチします。
SELECT field
FROM table
WHERE field = aCondition
テーブル内に空の値があると問題が発生します。 SELECT ステートメントでは、空の値を持つレコードに対応するために、指定されたテキストで空の値を記録または埋めるために、NULL チェックが必要です。
SELECT field, [isnull](field, '')
FROM table
WHERE field = aCondition
上記のステートメントでは、NULL 値は isnull() 関数を認識できない場合があります。 この問題に対処するために、isnull() 関数と同様の関数である ifnull() 関数があります。
ifnull() 関数の完全な構文は次のとおりです。
ifnull() 関数の構文:
ifnull(column, alternateValue)
パラメーター:
column |
SQLite データベースのターゲット列。 |
alternateValue |
戻り値が null または空の場合に選択された値。 |
以下のステートメントでは、ifnull() 関数を SELECT ステートメントと共に使用しています。 最初のステートメントは、すべての NULL 値をレコードから削除し、それらを空の文字列に置き換えます。
データベース レコードの NULL 値の代わりに任意の値を追加できます。 これは、SQLite データベースで NULL 値が This is a NULL 文字列値に置き換えられた 2 番目のステートメントで示されます。
ifnull() 関数は正確に 2つの引数を取り、指定された引数が両方とも NULL の場合は、最初の空でない文字列またはテキスト、または NULL を返します。
SELECT ifnull(NameofColumn,'')
SELECT ifnull(NULL,'This is a NULL');
THEN と ELSE を使用して、SQLite データベースの NULL 値を確認する
または、最初のシナリオが条件に合わない場合は、条件文 IS NULL を使用して、テーブル内の空の値をチェックできます。
以下の SQLite ステートメントは、ISNULL(fieldName, 0) コマンドと同等です。 IS NULL 句は、データベース内のすべての空の値を返します。
値が見つかった場合、THEN は空の値を 0 値に置き換えます。何かが見つかった場合 (空でない場合)、ELSE は値を変更しません。
SELECT fieldName FROM NameOfTable WHERE fieldName IS NULL THEN 0 ELSE fieldName END
SQLite データベースで COALESCE() 関数を使用する
ifnull() 関数と同様に、COALESCE() 関数は、指定された値が NULL である列の値に代替値を提供します。 COALESCE() 関数で null 値をチェックする SQLite ステートメントを作成するには、指定されたテーブルのステートメントを作成します。
関数 COALESCE() は SQLite バージョン 3.8.6 以降で動作します。
| ID | 量 |
|---|---|
| 1 | 200 |
| 2 | 13 |
| 3 | ヌル |
| 4 | 30 |
| 5 | 512 |
SELECT COALESCE(Quantity, 0) AS Inventory
FROM Product;
更新されたテーブル出力:
| ID | 量 |
|---|---|
| 1 | 200 |
| 2 | 13 |
| 3 | 0 |
| 4 | 30 |
| 5 | 512 |
SQLite データベースで NVL() 関数を使用する
COALESCE() 関数と同様に、NVL() 関数も同じことを行います。 データベース内の空の値をチェックし、NVL() 関数で指定された別の値に置き換えます。
違いは、isnull() 関数が SQL サーバーの Oracle 関数である NVL() 関数に置き換えられたことです。
COALESCE() 関数と ifnull() 関数の違い
COALESCE() 関数と ifnull() 関数の主な違いは、ifnull() 関数が 2つの引数しかとらないことです。 第 1 引数が NULL かどうかをチェックし、NULL の場合は第 2 引数に置き換えます。
逆に、関数 COALESCE() は 2つ以上のパラメーターを取り、最初の引数が NULL かどうかをチェックします。 最初の引数が NULL の場合、2 番目の引数をチェックします。
2 番目の引数が NULL の場合、空でない値が見つかるまで次の引数をチェックし続け、それを最初の NULL 引数に置き換えます。
SELECT IFNULL('any value', 'extra value');
SELECT IFNULL(NULL,'extra value');
SELECT COALESCE(NULL, 'extra value');
SELECT COALESCE(NULL, 'any value', 'extra value');
SELECT COALESCE(NULL, NULL, NULL, NULL, 'the non-null value');
出力:
any value
extra value
extra value
some value
the non-null value
COALESCE() 関数と isnull() 関数の違い
主に、両方の関数は同じ機能を実行し、NULL 値をチェックして、指定された空でない値に置き換えます。 ただし、動作には違いがあります。
- 違いは、
isnull()関数は 1 回だけ評価されるのに対し、COALESCE()関数は複数回評価されることです。 - もう 1つの違いは、データ型を決定する際に、関数
isnull()が最初の引数のデータ型を使用するのに対し、COALESCE()関数はCASE式ルールを使用し、最も優先度の高いデータ型を取ることです。 . - 最後の違いは、関数
isnull()がNULL値を返さないことです。この関数の結果は常に非 Nullable であると想定しています。COALESCE()関数はNULL式を返すことができます。
例 1:
CREATE TABLE example
(
column1 INTEGER NULL,
column2 AS COALESCE(column1, 0) PRIMARY KEY,
column3 AS ISNULL(column1, 0)
);
出力:
# the statement fails as the nullability of the COALESCE function evaluates to NULL
Error: PRIMARY KEY cannot accept NULL values
例 2:
CREATE TABLE example
(
column1 INTEGER NULL,
column2 AS COALESCE(column1, 0),
column3 AS ISNULL(col1umn, 0) PRIMARY KEY
);
出力:
# the above statement works as the nullability of the ISNULL function evaluates as NOT NULL.
No error
Hi, I'm Junaid. I am a freelance software developer and a content writer. For the last 3 years, I have been working and coding with Python. Additionally, I have a huge interest in developing native and hybrid mobile applications.
LinkedIn