Oracle
 sql >> Baza danych >  >> RDS >> Oracle

REGEXP_COUNT ignorowanie rozróżniania wielkości liter

Uruchom:

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

I zobacz, jakich parametrów sesji NLS używasz.

Na przykład:

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;

Wyjścia:

Ale:

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;

Wyjścia:

Aby to naprawić, możesz:

  • Zmień NLS_SORT parametr sesji.
  • Lub (jak wspomniał @AlexPoole) użyj [:lower:] Zestaw znaków POSIX zamiast a-z .

db<>fiddle tutaj




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie dat przed rokiem 1950 w Oracle

  2. Hibernacja> CLOB> Oracle :(

  3. Rekurencyjne zapytanie SQL w tabeli samoodwołującej się (Oracle)

  4. Tworzenie tabeli i wstawianie w ramach tej samej procedury w pl/sql

  5. Stałe w zapytaniu Oracle SQL