sql >> Databáze >  >> RDS >> Oracle

REGEXP_COUNT ignoruje rozlišování velkých a malých písmen

Spustit:

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

A podívejte se, jaké parametry relace NLS používáte.

Například:

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;

Výstupy:

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;

Výstupy:

Chcete-li to opravit, můžete:

  • Změňte NLS_SORT parametr relace.
  • Nebo (jak uvedl @AlexPoole) použijte [:lower:] Znaková sada POSIX namísto a-z .

db<>fiddle zde




  1. Provádění změn replikační topologie pro PostgreSQL

  2. Oracle PLSQL zkrátí datum a čas na 15minutové bloky

  3. Jak nahradit MySQL Perconou na Plesk CentOS 7

  4. Databáze Oracle:Jak číst BLOB?