sql access - Ricerca insensibile alle maiuscole e minuscole in Oracle




3 Answers

Dal 10gR2, Oracle consente di ottimizzare il comportamento dei confronti tra stringhe impostando i parametri della sessione NLS_COMP e NLS_SORT :

SQL> SET HEADING OFF
SQL> SELECT *
  2  FROM NLS_SESSION_PARAMETERS
  3  WHERE PARAMETER IN ('NLS_COMP', 'NLS_SORT');

NLS_SORT
BINARY

NLS_COMP
BINARY


SQL>
SQL> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
  2  FROM DUAL;

         0

SQL>
SQL> ALTER SESSION SET NLS_COMP=LINGUISTIC;

Session altered.

SQL> ALTER SESSION SET NLS_SORT=BINARY_CI;

Session altered.

SQL>
SQL> SELECT *
  2  FROM NLS_SESSION_PARAMETERS
  3  WHERE PARAMETER IN ('NLS_COMP', 'NLS_SORT');

NLS_SORT
BINARY_CI

NLS_COMP
LINGUISTIC


SQL>
SQL> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
  2  FROM DUAL;

         1

È anche possibile creare indici senza distinzione tra maiuscole e minuscole:

create index
   nlsci1_gen_person
on
   MY_PERSON
   (NLSSORT
      (PERSON_LAST_NAME, 'NLS_SORT=BINARY_CI')
   )
;

Questa informazione è stata presa da ricerche senza distinzione tra maiuscole e minuscole di Oracle . L'articolo menziona REGEXP_LIKE ma sembra funzionare anche con old = buono.

Nelle versioni precedenti a 10gR2 non può essere fatto e il solito approccio, se non hai bisogno di ricerca con accento-insensibile , è solo UPPER() sia la colonna che l'espressione di ricerca.

funzione funzioni

Il comportamento predefinito di LIKE e degli altri operatori di confronto, = etc è case-sensitive.

È possibile renderli insensibili alle maiuscole e alle minuscole?




forse puoi provare a usare

SELECT user_name
FROM user_master
WHERE upper(user_name) LIKE '%ME%'



puoi fare qualcosa del genere:

where regexp_like(name, 'string$', 'i');



Related

sql oracle case-sensitive case-insensitive sql-like