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

大文字と小文字の区別を無視するREGEXP_COUNT

    実行:

    SELECT *
    FROM   NLS_SESSION_PARAMETERS
    WHERE  parameter IN ( 'NLS_COMP', 'NLS_SORT' );
    

    そして、使用しているNLSセッションパラメータを確認してください。

    例:

    ALTER SESSION SET NLS_COMP=BINARY;
    ALTER SESSION SET NLS_SORT=BINARY;
    SELECT regexp_count('OOO', '[a-z0-9]', 1, 'c' ) AS COUNT_AZ,
           regexp_count('OOO', '[[:lower:][:digit:]]', 1, 'c' ) AS count_lower
    FROM   DUAL;
    

    出力:

    しかし:

    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GERMAN_AI;
    -- or ALTER SESSION SET NLS_SORT=GERMAN_CI;
    -- or ALTER SESSION SET NLS_SORT=FRENCH_CI;
    -- or many others
    SELECT regexp_count('OOO', '[a-z0-9]', 1, 'c' ) AS COUNT_AZ,
           regexp_count('OOO', '[[:lower:][:digit:]]', 1, 'c' ) AS count_lower
    FROM   DUAL;
    

    出力:

    これを修正するには、次のいずれかを実行できます。

    • NLS_SORTを変更します セッションパラメータ。
    • または(@AlexPooleで言及されているように)[:lower:]を使用します a-zの代わりにPOSIX文字セット 。

    db <> fiddle こちら




    1. SQLの%を使用した単語アナグラマー

    2. mysqlは、テーブル内の文字列の先頭と文字列を一致させます

    3. MySQLPythonを更新または挿入する

    4. SQLServerで列をNullからNotNullに変更する方法