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

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

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

    英数字以外の文字には、 [email protected]#&()–[{}]:;',?/*などの句読文字が含まれます。 および `~$^+=<>“などの記号 、およびスペースやタブ文字などの空白文字。

    サンプルデータ

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

    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文字クラスを使用して、英数字のみを含む行を検索し、NOTでそれを否定します。 オペレーター。

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

    結果:

    +----------------------+
    | c1                   |
    +----------------------+
    | ()                   |
    | [email protected]#&()–[{}]:;',?/*   |
    | `~$^+=<>“            |
    |                      |
    +----------------------+

    特定の文字を除外する必要がある場合は、いつでもNULLIF()を使用できます。 働き。

    たとえば、最後の行から空の文字列を除外しましょう:

    SELECT c1 FROM t1 
    WHERE NULLIF(c1, '') NOT REGEXP '[[:alnum:]]';

    結果:

    +----------------------+
    | c1                   |
    +----------------------+
    | ()                   |
    | [email protected]#&()–[{}]:;',?/*   |
    | `~$^+=<>“            |
    +----------------------+

    オプション2:文字の範囲を指定する

    これを行う別の方法は、正規表現内で文字の範囲を指定することです。

    例:

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

    結果:

    +----------------------+
    | c1                   |
    +----------------------+
    | ()                   |
    | [email protected]#&()–[{}]:;',?/*   |
    | `~$^+=<>“            |
    |                      |
    | é                    |
    | É                    |
    | ø                    |
    +----------------------+

    そして、空の文字列を削除するには:

    SELECT c1 FROM t1
    WHERE NULLIF(c1, '') NOT REGEXP '[A-Za-z0-9]';

    結果:

    +----------------------+
    | c1                   |
    +----------------------+
    | ()                   |
    | [email protected]#&()–[{}]:;',?/*   |
    | `~$^+=<>“            |
    | é                    |
    | É                    |
    | ø                    |
    +----------------------+

    この場合、除外範囲はéのような英数字をカバーしていませんでした 、É 、およびø 、したがって、出力は英数字以外の文字の真の表現ではありません。とはいえ、少なくともこの方法では、結果に含めたり除外したりする正確な文字を指定するオプションが提供されます。


    1. レコードがない場合、SELECTSUMは行を返します

    2. MySQL Galeraクラスターストリーミングレプリケーションのガイド:パート1

    3. Windows認証またはSQLServer認証を使用してSQLServerインスタンスに接続する方法-SQLServer/T-SQLチュートリアルパート3

    4. SQL Serverのインラインテーブル値関数(ITVF)の概要