以下は、PostgreSQLで英数字のみを含む行を返すための2つのメソッドです。
英数字は、英字と英数字です。
サンプルデータ
例では、次のデータを使用します。
SELECT c1 FROM t1;
結果:
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の~
を使用できます 値を正規表現と比較する演算子。
PostgreSQLの正規表現機能には、POSIX文字クラスのサポートが含まれています。したがって、[:alnum:]
を使用できます 英数字を含む行を検索するための正規表現のPOSIX文字クラス。
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
結果:
Music Café 007 é É ø
これは、英数字のみで構成される値のみを返します。行に英数字と英数字以外の文字の両方が含まれている場合、その行は返されません。
スペース文字は英数字ではないと見なされるため、スペースを含める場合は、次のようにすることができます。
SELECT c1 FROM t1
WHERE c1 ~ '^[[:alnum:] ]+$';
結果:
Music Live Music Café Café Del Mar 100 Cafés Player 456 007 é É é 123 ø ø 123
含むすべての行を返す 英数字(行に英数字以外の文字も含まれている場合でも)、これを行うことができます:
SELECT c1 FROM t1
WHERE c1 ~ '[[:alnum:]]';
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é É é 123 ø ø 123
オプション2:文字の範囲を指定する
これを行う別の方法は、正規表現内で文字の範囲を指定することです。
例:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9]+$';
結果:
Music 007
これにより、最初の例よりも返される行が少なくなります。 é
を含めなかったからです 、É
、またはø
私の範囲内の文字であるため、それらの文字を含む行はすべて出力から除外されます。
したがって、この方法を使用する場合は特に注意が必要です。含める必要のある文字を誤って除外するのは簡単です。
ただし、この範囲を維持しながら、次のようなスペースを含めることができます:
SELECT c1 FROM t1
WHERE c1 ~ '^[A-Za-z0-9 ]+$';
結果:
Music Live Music Player 456 007
また、以下を使用して、含むすべての行を含めることができます。 私たちの範囲の文字(この範囲外の文字も含まれている場合でも):
SELECT c1 FROM t1
WHERE c1 ~ '[A-Za-z0-9]';
結果:
Music Live Music Café Café Del Mar 100 Cafés [email protected] 1 + 1 $1.50 Player 456 007 é 123 ø 123