sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで英数字のみを含む行を返す2つの方法

    以下は、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


    1. MariaDB JSON_LENGTH()の説明

    2. インデックス付きビューとMERGEを使用している場合は、こちらをお読みください。

    3. MOOCプラットフォームのデータベースモデル

    4. Oracleシーケンスですが、MSSQLServerで