以下は、PostgreSQLで英数字以外の文字のみを含む行を返すための2つのオプションです。
英数字以外の文字には、[email protected]#&()–[{}]:;',?/*
などの句読文字が含まれます。 および`~$^+=<>“
のような記号 、およびスペースやタブ文字などの空白文字。
サンプルデータ
例では、次のデータを使用します。
SELECT c1 FROM t1;
結果:
+----------------------+ | c1 | +----------------------+ | Music | | Live Music | | Café | | Café Del Mar | | 100 Cafés | | [email protected] | | 1 + 1 | | () | | [email protected]#&()–[{}]:;',?/* | | `~$^+=<>“ | | $1.50 | | Player 456 | | 007 | | NULL | | | | é | | É | | é 123 | | ø | | ø 123 | +----------------------+
オプション1:[:alnum:]
と比較
PostgreSQLの!~
を使用できます 列を正規表現と比較する演算子。値が正規表現と一致しないことを指定する場合は、この演算子を使用します。
MySQLの正規表現機能には、POSIX文字クラスのサポートが含まれています。したがって、[:alnum:]
を使用できます 正規表現のPOSIX文字クラス。
SELECT c1 FROM t1
WHERE c1 !~ '[[:alnum:]]';
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
空の文字列もnum-numericであるため、この例では空の文字列を含む行が返されました。
NULLIF()
を使用して、空の文字列を除外できます :
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[[:alnum:]]';
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“
オプション2:文字の範囲を指定する
これを行う別の方法は、正規表現内で文字の範囲を指定することです。
例:
SELECT c1 FROM t1
WHERE c1 !~ '[A-Za-z0-9]';
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
そして、空の文字列を削除するには:
SELECT c1 FROM t1
WHERE NULLIF(c1, '') !~ '[A-Za-z0-9]';
結果:
() [email protected]#&()–[{}]:;',?/* `~$^+=<>“ é É ø
この場合、除外範囲はé
のような英数字をカバーしていませんでした 、É
、およびø
、したがって、出力は英数字以外の文字の真の表現ではありません。とはいえ、少なくともこの方法では、結果に含めたり除外したりする正確な文字を指定するオプションが提供されます。