sql >> Databasteknik >  >> RDS >> Oracle

REGEXP_COUNT ignorerar skiftlägeskänslighet

Kör:

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

Och se vilka NLS-sessionsparametrar du använder.

Till exempel:

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;

Utgångar:

Men:

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;

Utgångar:

För att åtgärda detta kan du antingen:

  • Ändra NLS_SORT sessionsparameter.
  • Eller (som nämnt av @AlexPoole) använd [:lower:] POSIX teckenuppsättning istället för a-z .

db<>fiol här




  1. Laravel med Docker-problem med att ansluta MySQL

  2. Återställ markörpositionen efter ResultSet updateRow

  3. MySQL-fråga för att hitta det bästa boendet till bästa priser

  4. Gör ett objekt DÖ i SQL Server