1つのテストのみを使用して値のない列(null、空、またはすべてのスペース)を返すSELECTステートメントを記述したいと思います。
私はこれがうまくいくと思った:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
しかし、これはNULL値では機能しません。
もちろん追加できます
OR column_name IS NULL
それは動作しますが、単一のテストを使用する方法が欲しいです。
機能的には、使用できるはずです
SELECT column_name
FROM table_name
WHERE TRIM(column_name) IS NULL
問題は、COLUMN_NAMEのインデックスが使用されないことです。選択条件である場合、TRIM(column_name)に関数ベースのインデックスが必要です。
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
column_nameがNULLの場合、ISNULL(column_name, '')
は ''を返します。それ以外の場合、column_nameを返します。
UPDATE
Oracleでは、NVL
を使用して同じ結果を得ることができます。
SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
列のnull or Empty
値をチェックしているときに、さまざまなデータベースにサポートに関する懸念があることに気付きました。
すべてのデータベースはサポートしていませんTRIM
method。
以下は、さまざまなデータベースでサポートされている方法を理解するためのマトリックスです。
SQLのTRIM関数は、指定されたプレフィックスまたはサフィックスを文字列から削除するために使用されます。削除される最も一般的なパターンは空白です。この関数は、データベースごとに異なる方法で呼び出されます。
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
TRIM(), RTRIM(), LTRIM()
Empty/Null/Whitespaceの確認方法:-
以下は、異なるデータベースに応じた2つの異なる方法です。
これらのトリム関数の構文は次のとおりです。
チェックするためのトリムの使用-
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
チェックするためのLTRIMとRTRIMの使用-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
上記の両方の方法は、データベースのサポートに基づいて使用するだけで同じ結果を提供します。空のFirstName
がある場合は、UserDetails
テーブルからLastName
を返すだけです。
これを希望すると他の人にも役立つ:)
NULLIF関数は、空白のみの列値をNULL値に変換します。 T-SQLおよびSQL Server 2008以降で動作します。
SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
このphpMyAdminクエリは、null、空、または単なる空白ではない行を返しています。
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
nULL /空/空白のみの行を選択する場合は、NOTを削除します。
以下のクエリを使用すると動作します
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
特定のフィールドが空白であるレコードを検索するためにOracleでクエリを実行する個人提案(これは(null)または他のフィールドを空白行だけに含めない)は機能しませんでした。提案されたすべてのコードを試しました。オンラインで検索を続けると思います。
*****更新*****
私はこれを試してみましたが、1未満の場合はなぜ動作しないのかわかりませんが、何らかの理由で2未満が動作し、フィールドが空のレコードのみを返しました
[tableName]から[columnName]を選択します。LENGTH(columnName)<2;
データを変換するために使用されたスクリプトが空白であってもフィールドに何かを残していると推測しています。それは<2が機能するが<1ではない理由に関するとにかく私の推測です
ただし、その列フィールドに2文字未満の他の値がある場合は、別の解決策を考え出す必要があります。他のキャラクターがあまりいない場合は、それらを選択できます。
私のソリューションがいつか他の誰かに役立つことを願っています。