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

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

    以下は、MariaDBで英数字のみを含む行を返すための2つのメソッドです。

    英数字は、英字と英数字です。

    サンプルデータ

    例では、次のデータを使用します。

    CREATE TABLE t1 (
        c1 varchar(255) NULL
        );
    
    INSERT INTO t1 VALUES
        ('Music'),
        ('Live Music'),
        ('Café'),
        ('Café Del Mar'),
        ('100 Cafés'),
        ('[email protected]'),
        ('1 + 1'),
        ('()'),
        ('[email protected]#&()–[{}]:;'',?/*'),
        ('`~$^+=<>“'),
        ('$1.50'),
        ('Player 456'),
        ('007'),
        (null),
        (''),
        ('é'),
        ('É'),
        ('é 123'),
        ('ø'),
        ('ø 123');
    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:]と比較

    MariaDBの正規表現機能には、POSIX文字クラスのサポートが含まれています。したがって、[:alnum:]を使用できます 英数字を含む行を検索するための正規表現のPOSIX文字クラス。

    SELECT c1 FROM t1 
    WHERE c1 REGEXP '^[[:alnum:] ]+$';

    結果:

    +-------+
    | c1    |
    +-------+
    | Music |
    | Café  |
    | 007   |
    | é     |
    | É     |
    | ø     |
    +-------+

    これにより、英数字のみを含む行のみが返されました。行に英数字と英数字以外の文字の両方が含まれている場合、その行は返されません。

    スペース文字は英数字ではないと見なされるため、スペースを含める場合は、次のようにすることができます。

    SELECT c1 FROM t1 
    WHERE c1 REGEXP '^[[:alnum:] ]+$';

    結果:

    +---------------+
    | c1            |
    +---------------+
    | Music         |
    | Live Music    |
    | Café          |
    | Café Del Mar  |
    | 100 Cafés     |
    | Player 456    |
    | 007           |
    | é             |
    | É             |
    | é 123         |
    | ø             |
    | ø 123         |
    +---------------+

    含むすべての行を返す 英数字(行に英数字以外の文字も含まれている場合でも)、これを行うことができます:

    SELECT c1 FROM t1 
    WHERE c1 REGEXP '[[:alnum:]]';

    結果:

    +-------------------+
    | c1                |
    +-------------------+
    | 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 REGEXP '^[A-Za-z0-9 ]+$';

    結果:

    +-------+
    | c1    |
    +-------+
    | Music |
    | 007   |
    +-------+

    これにより、最初の例よりも返される行が少なくなります。これは、éを含めなかったためです。 、É 、またはø 私の範囲内の文字であるため、それらの文字を含む行はすべて出力から除外されます。

    したがって、この方法を使用するときは、含める必要のある文字を誤って除外した場合に備えて注意する必要があります。

    ただし、この範囲を維持しながら、次のようなスペースを含めることができます:

    SELECT c1 FROM t1 
    WHERE c1 REGEXP '^[A-Za-z0-9 ]+$';

    結果:

    +------------+
    | c1         |
    +------------+
    | Music      |
    | Live Music |
    | Player 456 |
    | 007        |
    +------------+

    また、以下を使用して、含むすべての行を含めることができます。 私たちの範囲の文字(この範囲外の文字も含まれている場合でも):

    SELECT c1 FROM t1 
    WHERE c1 REGEXP '[A-Za-z0-9]';

    結果:

    +-------------------+
    | c1                |
    +-------------------+
    | Music             |
    | Live Music        |
    | Café              |
    | Café Del Mar      |
    | 100 Cafés         |
    | [email protected] |
    | 1 + 1             |
    | $1.50             |
    | Player 456        |
    | 007               |
    | é 123             |
    | ø 123             |
    +-------------------+

    1. 複数の動作を持つクエリを作成する方法

    2. MySQLの複数の列に基づいてランクを決定する

    3. 一時テーブルからフィールド名を取得する方法(SQL Server 2008)

    4. 無効なOracleURLが指定されました:OracleDataSource.makeURL