web-dev-qa-db-ja.com

単一のテストでnull / empty / whitespace値をチェックする方法は?

1つのテストのみを使用して値のない列(null、空、またはすべてのスペース)を返すSELECTステートメントを記述したいと思います。

私はこれがうまくいくと思った:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

しかし、これはNULL値では機能しません。

もちろん追加できます

OR column_name IS NULL

それは動作しますが、単一のテストを使用する方法が欲しいです。

70
John Gordon

機能的には、使用できるはずです

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

問題は、COLUMN_NAMEのインデックスが使用されないことです。選択条件である場合、TRIM(column_name)に関数ベースのインデックスが必要です。

81
Justin Cave
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 ''
17
GendoIkari

列のnull or Empty値をチェックしているときに、さまざまなデータベースにサポートに関する懸念があることに気付きました。

すべてのデータベースはサポートしていませんTRIMmethod。

以下は、さまざまなデータベースでサポートされている方法を理解するためのマトリックスです。

SQLのTRIM関数は、指定されたプレフィックスまたはサフィックスを文字列から削除するために使用されます。削除される最も一般的なパターンは空白です。この関数は、データベースごとに異なる方法で呼び出されます。

  • MySQL:TRIM(), RTRIM(), LTRIM()
  • Oracle:RTRIM(), LTRIM()
  • SQL Server:TRIM(), RTRIM(), LTRIM()

Empty/Null/Whitespaceの確認方法:-

以下は、異なるデータベースに応じた2つの異なる方法です。

これらのトリム関数の構文は次のとおりです。

  1. チェックするためのトリムの使用-

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. チェックするためのLTRIMとRTRIMの使用-

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

上記の両方の方法は、データベースのサポートに基づいて使用するだけで同じ結果を提供します。空のFirstNameがある場合は、UserDetailsテーブルからLastNameを返すだけです。

これを希望すると他の人にも役立つ:)

6
Vikash Pandey

NULLIF関数は、空白のみの列値をNULL値に変換します。 T-SQLおよびSQL Server 2008以降で動作します。

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
4

このphpMyAdminクエリは、null、空、または単なる空白ではない行を返しています。

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

nULL /空/空白のみの行を選択する場合は、NOTを削除します。

2
Chose

以下のクエリを使用すると動作します

SELECT column_name FROM table_name where isnull(column_name,'') <> ''
1
dvenkateshreddy

特定のフィールドが空白であるレコードを検索するためにOracleでクエリを実行する個人提案(これは(null)または他のフィールドを空白行だけに含めない)は機能しませんでした。提案されたすべてのコードを試しました。オンラインで検索を続けると思います。

*****更新*****

私はこれを試してみましたが、1未満の場合はなぜ動作しないのかわかりませんが、何らかの理由で2未満が動作し、フィールドが空のレコードのみを返しました

[tableName]から[columnName]を選択します。LENGTH(columnName)<2;

データを変換するために使用されたスクリプトが空白であってもフィールドに何かを残していると推測しています。それは<2が機能するが<1ではない理由に関するとにかく私の推測です

ただし、その列フィールドに2文字未満の他の値がある場合は、別の解決策を考え出す必要があります。他のキャラクターがあまりいない場合は、それらを選択できます。

私のソリューションがいつか他の誰かに役立つことを願っています。

0
CatWoman