sql >> Base de Datos >  >> RDS >> Oracle

Texto de búsqueda de Oracle con caracteres no ingleses

1) Usando nlssort con BINARY_AI (tanto mayúsculas como minúsculas y acento):

SQL> select nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('Pena Bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('pena bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select 'true' T from dual where nlssort('pena bainao', 'NLS_SORT = BINARY_AI') = nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') ;

T
----
true

2) También podría modificar la variable de sesión NLS_SORT a binary_ai y luego no tendría que especificar NLS_SORT cada vez:

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

no rows selected

SQL> alter session set nls_sort = binary_ai;

Session altered.

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

T
----
true

3) Para abandonar el uso de nlssort y cambie la semática de todo, también establezca la variable de sesión nls_comp:

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

no rows selected

SQL> alter session set nls_comp = linguistic;

Session altered.

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

T
----
true

La opción 1 cambia solo el comportamiento local, la consulta en la que desea resultados diferentes. Las opciones 2 y 3 cambiarán el comportamiento de otras consultas y es posible que no sean lo que desea. Consulte Tabla 5-2 de Guía de asistencia para la globalización de bases de datos de Oracle® . Consulte también la sección "Uso de índices lingüísticos " para ver cómo poder usar índices.