2009-05-16 22 views
30

¿Cómo escribo una consulta en Oracle ignorando el caso de las cadenas que se comparan? Por ejemplo, "ángel", "ángel", "ángel", "ángel", "ángel" serían todos iguales en comparación.Cómo comparar cadenas en sql ignorando el caso?

+0

seleccione RPAD (a.name, 10, '=') "Nombre del Cliente", RPAD (b.name, 12, '*') "Nombre del Consumidor" de s_customer a, b s_region donde una .region_id = b.id AND a.name LIKE '% sport%' Deporte es la palabra que necesito –

Respuesta

45

Si igualando el valor completo del campo utilizar

WHERE UPPER(fieldName) = 'ANGEL' 

EDIT: Desde su comentario que desea utilizar:

SELECT 
    RPAD(a.name, 10,'=') "Nombre del Cliente" 
    , RPAD(b.name, 12,'*') "Nombre del Consumidor" 
FROM 
    s_customer a, 
    s_region b 
WHERE 
    a.region_id = b.id 
    AND UPPER(a.name) LIKE '%SPORT%' 
+2

quiero por jaj, si la respuesta de Gary resolvió tu problema, debes aceptar como la respuesta. :-) –

+10

Si la tabla de clientes es grande, valdría la pena considerar agregar un índice basado en funciones en la parte superior (nombre) para este tipo de consulta. –

9

Se puede utilizar:

select * from your_table where upper(your_column) like '%ANGEL%' 

De lo contrario, puede usar:

select * from your_table where upper(your_column) = 'ANGEL' 

Que será más eficiente si está buscando una coincidencia sin caracteres adicionales antes o después de campo your_column como Gary Ray sugirió en sus comentarios.

+0

De acuerdo. Me gusta es muy conciso. – Daniel

+0

@ PSC: su cláusula Where solo coincidirá si hay una variación de 'angel' sin caracteres adicionales antes o después de que esté en el campo. Si ese es el caso, entonces '=' es más eficiente que 'LIKE'. Ver el comentario OP. –

12

podría utilizar el UPPER palabra clave:

SELECT * 
FROM Customers 
WHERE UPPER(LastName) = UPPER('AnGel') 
0

No recuerdo la sintaxis exacta, pero es posible configurar la columna de la mesa para ser sensible a mayúsculas. Pero ten cuidado porque entonces no podrás emparejar según el caso y si QUIERES que 'cool' no coincida con 'CoOl' ya no será posible.

+0

No creo que sea posible configurar una columna para que no distinga entre mayúsculas y minúsculas en Oracle. – tuinstoel

+0

Puedo estar equivocado. Sé que es una opción en mySql –

2

Más detalles sobre la respuesta del Sr. Dredel y el comentario de tuinstoel. Los datos en la columna se almacenarán en su caso específico, pero puede cambiar la sensibilidad de mayúsculas y minúsculas de su sesión para la coincidencia.

Puede cambiar la sesión o la base de datos para utilizar búsquedas lingüísticas o no sensibles a mayúsculas y minúsculas. También puede configurar índices para usar órdenes de clasificación particulares.

por ejemplo

ALTER SESSION SET NLS_SORT=BINARY_CI; 

Una vez que comienza a recibir a los idiomas distintos del inglés, con acentos y así sucesivamente, hay un apoyo adicional para el acento y minúsculas. Algunas de las capacidades varían según la versión, así que consulte el documento Globablization para su versión particular de Oracle. La última (11g) es here

3

antes de comparar las dos o más cadenas primera ejecutar los siguientes comandos

alter session set NLS_COMP=LINGUISTIC; 
alter session set NLS_SORT=BINARY_CI; 

después de esas dos sentencias ejecutadas entonces es posible comparar las cadenas y no habrá caso insensitive.for ejemplo tenía dos cadenas s1 = 'Apple' y s2 = 'apple', si desea comparar las dos cadenas antes de ejecutar las declaraciones anteriores, esas dos cadenas se tratarán como dos cadenas diferentes, pero cuando compare las cadenas después de la ejecución de las dos declaraciones alternan entonces esas dos cadenas s1 y s2 se tratarán como la misma cadena

razones para el uso de estas dos afirmaciones

Necesitamos establecer NLS_COMP = lingüística y NLS_SORT = BINARY_CI con el fin de utilizar 10gR2 mayúsculas y minúsculas. Dado que son modificables por sesión, no es tan simple como configurarlos en los parámetros de inicialización.Podemos configurarlos en los parámetros de inicialización, pero solo afectan al servidor y no al lado del cliente.

Cuestiones relacionadas