[解決済み】"空白またはヌル値 "をチェックする最適な方法
質問
Postgres の SQL 文で、値が NULL または空文字列であるかどうかを確認する最良の方法は何ですか?
値は長い式になることがあるので、チェックの際に一度だけ書くことが望ましいです。
現在、私が使っているのは
coalesce( trim(stringexpression),'')=''
でも、ちょっと不格好ですね。
stringexpression
かもしれません
char(n)
を含む列または式
char(n)
列の末尾に空白を含む。
最適な方法は何ですか?
解決方法は?
式は
stringexpression = ''
が得られます。
TRUE
...
''
(または
任意
空白文字のみで構成される文字列で、データ型は
char(n)
)
NULL
...
NULL
FALSE
... その他
だから、チェックするために
"です。
stringexpression
はNULLか空"です。
:
(stringexpression = '') IS NOT FALSE
あるいは逆のアプローチ(読みやすいかもしれません)。
(stringexpression <> '') IS NOT TRUE
動作対象
任意の文字型
を含む
char(n)
.
比較演算子に関するマニュアルです。
または
を使わずに、オリジナルの表現を使用します。
trim()
にとってコストのかかるノイズである
char(n)
(後述)、あるいは他の文字種では不正確です。空白のみからなる文字列は空文字列として通過します。
coalesce(stringexpression, '') = ''
でも、一番上の式の方が速いんですよ。
その逆を主張するのはさらに簡単です。
"です。
stringexpression
がNULLでも空でもない場合"。
:
stringexpression <> ''
について
char(n)
これはデータ型についてです
char(n)
の略です。
character(n)
. (
char
/
character
の略です。
char(1)
/
character(1)
.) その使用方法は
Postgresでは推奨されません。
:
ほとんどの場面で
text
またはcharacter varying
を使用する必要があります。
混同しないように
char(n)
他の便利な文字型
varchar(n)
,
varchar
,
text
または
"char"
(ダブルクオートを使用)。
で
char(n)
an
空の文字列
は、空白のみからなる他の文字列と変わりはありません。これらはすべて、折りたたんで
n
のスペースは
char(n)
型の定義ごとに 上記の式は、論理的に考えて
char(n)
と同じように、(他の文字型には使えない)これらの文字と同じように。
coalesce(stringexpression, ' ') = ' '
coalesce(stringexpression, '') = ' '
デモ
にキャストすると、空文字列は任意の空白文字列と等しくなります。
char(n)
:
SELECT ''::char(5) = ''::char(5) AS eq1
, ''::char(5) = ' '::char(5) AS eq2
, ''::char(5) = ' '::char(5) AS eq3;
結果
eq1 | eq2 | eq3
----+-----+----
t | t | t
を使用して、NULLまたは空文字列かどうかテストします。
char(n)
:
SELECT stringexpression
, stringexpression = '' AS base_test
, (stringexpression = '') IS NOT FALSE AS test1
, (stringexpression <> '') IS NOT TRUE AS test2
, coalesce(stringexpression, '') = '' AS coalesce1
, coalesce(stringexpression, ' ') = ' ' AS coalesce2
, coalesce(stringexpression, '') = ' ' AS coalesce3
FROM (
VALUES
('foo'::char(5))
, ('')
, (' ') -- not different from '' in char(n)
, (NULL)
) sub(stringexpression);
結果
文字列表現|ベーステスト|テスト1|テスト2|コアレッセンス1|コアレッセンス2|コアレッセンス3 ------------------+-----------+-------+-------+-----------+-----------+----------- foo|f|f|f|f|f|f|f|f|f|f | t|t|t|t|t|t|t|t|t|t | t|t|t|t|t|t|t|t|t|t|t ヌル | ヌル | t | t | t | t | t
nullまたは空文字列をテストする。
text
:
SELECT stringexpression
, stringexpression = '' AS base_test
, (stringexpression = '') IS NOT FALSE AS test1
, (stringexpression <> '') IS NOT TRUE AS test2
, coalesce(stringexpression, '') = '' AS coalesce1
, coalesce(stringexpression, ' ') = ' ' AS coalesce2
, coalesce(stringexpression, '') = ' ' AS coalesce3
FROM (
VALUES
('foo'::text)
, ('')
, (' ') -- different from '' in a sane character types
, (NULL)
) sub(stringexpression);
結果
文字列表現|ベーステスト|テスト1|テスト2|コアレッセンス1|コアレッセンス2|コアレッセンス3 ------------------+-----------+-------+-------+-----------+-----------+----------- foo|f|f|f|f|f|f|f|f|f|f | t|t|t|t|t|f|f|f | f|f|f|f|f|f|f|f|f ヌル | ヌル | t|t|t|t|f|f
関連
関連
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み] SQLでchar値をmoneyに変換できない
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] JavaScriptでNULL値をチェックするにはどうしたらいいですか?
-
[解決済み] JavaScriptのNullとundefinedのチェックと==と===の違いについて
-
[解決済み] JavaScriptで未定義またはNULL変数をチェックする方法は?
-
[解決済み] PowerShellで文字列がNULLまたは空であるかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「パラメータ@objnameがあいまいか、主張する@objtype(COLUMN)が間違っています」を解決するにはどうすればよいですか?[重複している]。
-
[解決済み】ストアドプロシージャーのエラー ORA-06550
-
[解決済み】SQL Server サブクエリが1つ以上の値を返しました。サブクエリが =, !=, <, <= , >, >= に続く場合、これは許可されません。
-
[解決済み】SQL ServerでIdentityカラムを更新する方法は?
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] Presto SQL ピボッティング(言葉は悪いですが)データ
-
[解決済み] ora-06553 pls-306 'ogc_x' の呼び出しで引数の数または種類が誤っている。
-
[解決済み] 集計を行わずに行から列へピボット移動する
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] Postgres の SELECT で列を連結する方法は?