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

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

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

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

    サンプルデータ

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

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

    オプション1:[:alnum:]と比較

    OracleのREGEXP_LIKE()を使用できます 値を正規表現と比較し、NOTで否定する関数 オペレーター。

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

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

    結果:

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

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

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

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

    例:

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

    結果:

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

    この場合、除外範囲はéのような英数字をカバーしていませんでした 、É 、およびø 、したがって、出力は英数字以外の文字の真の表現ではありません。

    範囲を拡張してこれらの文字を出力から除外する例を次に示します。

    SELECT c1 FROM t1 
    WHERE NOT REGEXP_LIKE(c1, '[A-Za-zÀ-Þß-ÿ0-9]');

    結果:

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

    1. MySQLのALTERTABLE:味方か敵か?

    2. MySQLは複数の文字を置き換えることができますか?

    3. MariaDB JSON_TYPE()の説明

    4. SQLSTATE[HY000][1045]CakePHPを使用したユーザー'username'@'localhost'のアクセスが拒否されました