Oracle
 sql >> Base de données >  >> RDS >> Oracle

REGEXP_COUNT ignore la sensibilité à la casse

Exécuter :

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

Et voyez quels paramètres de session NLS vous utilisez.

Par exemple :

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;

Sorties :

Mais :

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;

Sorties :

Pour résoudre ce problème, vous pouvez :

  • Modifier le NLS_SORT paramètre de session.
  • Ou (comme mentionné par @AlexPoole) utilisez le [:lower:] Jeu de caractères POSIX au lieu de a-z .

db<>violon ici