nullまたは空の値を含む可能性のある列がテーブルにあります。テーブルに存在する行で列が空かnullかを確認するにはどうすればよいですか?
(e.g. null or '' or ' ' or ' ' and ...)
nullまたは空の値を含む可能性のある列がテーブルにあります。テーブルに存在する行で列が空かnullかを確認するにはどうすればよいですか?
(e.g. null or '' or ' ' or ' ' and ...)
回答:
これsome_col
は、NULL
または''
(空の文字列)であるすべての行を選択します
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(文字列にスペースを1つ挿入)に変更すると、MySQLとOracleの両方で機能します。「onedaywhen」の回答を参照してください。some_col = ''
空の文字列はNULLを意味するため、Oracleでは機能しません。
' '
、SQLiteでは機能しません。同一/直接の文字列照合のみを処理します。
SQL-92標準で定義されているように、幅の異なる2つの文字列を比較するとき、幅の狭い値は幅の広い値と同じ幅になるようにスペースが右に埋め込まれます。したがって、完全にスペース(ゼロスペースを含む)で構成されるすべての文字列値は等しいと見なされます。
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
したがって、これは、スペースの数に関係なく機能します。 some_col
値です。
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
またはもっと簡潔に:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(文字列にスペースを1つ挿入)に変更すると、MySQLとOracleの両方で機能します。some_col = ''
空の文字列はそこでNULLを意味し、完全な条件はNULLになるため、Oracleでは機能しません。
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
してSELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
機能することでした。これが役立つことを願っています。
'' = ' '
SQLServerでは実際に機能しますが、SQLiteでは機能しませんが、今のところテストでは、私の知る限りではそうです。
条件を記述する短い方法:
WHERE some_col > ''
null > ''
はを生成するのでunknown
、これは両方null
と空の文字列を除外する効果があります。
coalesce(some_col, '') = ''
あなたは、列がnullであるか、使用してnullでないかどうかをテストすることができますWHERE col IS NULL
かWHERE col IS NOT NULL
たとえば、
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
あなたの例では、空白のさまざまな順列があります。を使用TRIM
して空白を削除し、を使用COALESCE
してNULL値をデフォルト設定できます(COALESCEは、指定した値から最初の非null値を返します。
例えば
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
この最後のクエリMyCol
は、nullまたは任意の長さの空白である行を返します。
回避できる場合は、WHERE句の列に関数を持たない方がよいでしょう。インデックスを使用するのが難しくなるためです。列がnullまたは空かどうかを確認するだけの場合は、次のようにするとよいでしょう。
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
詳細については、TRIM COALESCEおよびIS NULLを参照してください。
また、ヌル値を使用した作業のMySQLのドキュメントから
)
の前に=
、あなたの第二の例では、符号
WHEREのない別の方法は、これを試してください。
空の値とNULL値の両方を選択します
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
どちらか
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
または
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
null or Empty
プロジェクトの列の値を確認しているときに、さまざまなデータベースでサポートに関する懸念があることに気付きました。
すべてのデータベースはサポートしていません TRIM
方法。
以下は、さまざまなデータベースでサポートされているメソッドを理解するためのマトリックスです。
SQLのTRIM関数は、指定されたプレフィックスまたはサフィックスを文字列から削除するために使用されます。削除される最も一般的なパターンは空白です。この関数は、データベースによって呼び出す方法が異なります。
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
空/ヌルをチェックする方法:-
以下は、異なるデータベースに応じた2つの異なる方法です。
これらのトリム関数の構文は次のとおりです。
トリムを使用したチェック
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
LTRIMとRTRIMを使用したチェック
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
上記のどちらの方法でも、データベースのサポートに基づいて使用するだけで同じ結果が得られます。空の場合は、FirstName
from UserDetails
テーブルを返すだけですLastName
これがあなたを助けることを願っています:)
nullを確認する
$column is null
isnull($column)
空を確認
$column != ""
ただし、列には常にNOT NULLを設定する必要があります
。mysqlの最適化で処理できるIS NULLレベルは1つだけです。
NULL
値を決して受け入れないことは、議論のための別の全体的なトピックです。私はあなたの推論を提供することなくその推奨をすることは適切ではないと思います。
-1
およびのような非標準の「null」値の使用を促進するためにのみ役立ちます''
。
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
とLTRIM
、なくはTRIM
?
select isnull(mycolumn) from mytable
mycolumnがnullの場合、1を返します。