Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Consulta con LIKE es case sensitive?

Saludos, estoy usando una consulta con un LIKE en Interbase mediante un TQuery, pero lo que pongo en mi LIKE debe de ser en mayúsculas y minúsculas tal y como está en la base de datos, es decir si pongo:

Código SQL [-]
SELECT *
FROM CLIENTES
WHERE NOMBRE LIKE 's%'
ORDER BY NOMBRE ASC;

Solo me muestra los clientes cuyo nombre empieza con s minuscula.

Hay alguna forma para que este tipo de búsqueda no sea case sensitive?
__________________
Herr Heins Faust
Responder Con Cita
  #2  
Antiguo 16-06-2008
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por Faust Ver Mensaje
Hay alguna forma para que este tipo de búsqueda no sea case sensitive?
Si usas MySQL quizá pueda servirte la función UPPER(), si usas otra bd mira que funciones hacen lo mismo.

Saludos.
Responder Con Cita
  #3  
Antiguo 16-06-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Post Like

Cita:
Empezado por Faust Ver Mensaje
Saludos, estoy usando una consulta con un LIKE en Interbase mediante un TQuery, pero lo que pongo en mi LIKE debe de ser en mayúsculas y minúsculas tal y como está en la base de datos, es decir si pongo:

Código SQL [-]
SELECT *
FROM CLIENTES
WHERE NOMBRE LIKE 's%'
ORDER BY NOMBRE ASC;

Solo me muestra los clientes cuyo nombre empieza con s minuscula.

Hay alguna forma para que este tipo de búsqueda no sea case sensitive?
No conozco una manera pero si se podría pasar todo a minúsculas o a mayúsculas antes de ponerlos en el LIKE, veamos:

Código SQL [-]
 
Select *
From clientes 
where lower(nombre) LIKE 's%'
order by...

La función lower está en las UDF de interbase pero tiene una recomendación que mejor leerla.

*****************************************
* Lower
* Functional description:
* Returns the input string into lower
* case characters. Note: This function
* will not work with international and
* non-ascii characters.
* Note: This function is NOT limited to
* receiving and returning only 80 characters,
* rather, it can use as long as 32767
* characters which is the limit on an
* INTERBASE character string.
*
*****************************************/

Yo encontré otra, "upper" que creo que funciona mejor y no es de una UDF, eso si, hay que pensar todo en mayúsculas. Y si te fijas en los foros la cosa está bien resuelta.

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 16-06-2008 a las 21:56:10. Razón: Errores de ortografía
Responder Con Cita
  #4  
Antiguo 17-06-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Faust, como te dicen debes usar Lower o Upper, para convertir o todo a mayuscula o todo a minuscula, tanto en el campo como en el parametro que le pases a tu like, así no importara si introducen mayusculas o minusculas o ambos.

Código Delphi [-]
 Query1.SQL.Text := 'SELECT * FROM CLIENTES '+
                     'WHERE UPPER(NOMBRE) LIKE '+UpperCase(parametro)+'%'+
                     'ORDER BY NOMBRE ASC';

Y si quieres trabajar con minuscualas entonces utilizas Lower y LowerCase.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 17-06-2008 a las 02:22:38.
Responder Con Cita
  #5  
Antiguo 17-06-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Gracias por sus respuetsas amigos...

Como lo que pongo en el LIKE es un texto que el usuario introduce en un TEdit, mejor le seteo la propiedad CharCase a ecUpperCase.
__________________
Herr Heins Faust
Responder Con Cita
  #6  
Antiguo 17-06-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

Además de las excelentes respuestas dadas, en InterBase y Firebird cuentas con la palabra reservada Containing que equivale a un Like '%X%' pero insensible al tamaño de las letras.

Saludos.

Al.
Responder Con Cita
  #7  
Antiguo 17-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González Ver Mensaje
equivale a un Like '%X%' pero insensible al tamaño de las letras.
O sea, que da lo mismo si buscas pepe el toro, pepe el toro o pepe el toro

Pero ya en serio, es curioso esto de FireBird. ¿Funciona con cualquier juego de caracteres? Lo pregunto porque, por ejemplo, en MySQL, cada base/tabla tiene definido un juego de caracteres y un cotejamiento. Y es el cotejamiento el que indica si las comparaciones son sensibles a mayúsculas y minúsculas o no. Y es que el cotejamiento controla cosas como hacer que a una búsqueda le de lo mismo u, U, ú y Ú, y no sé si el containing abarca también estos casos.

// Saludos
Responder Con Cita
  #8  
Antiguo 17-06-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Muy buena pregunta Román.

En el caso de Firebird, el juego de caracteres y el cotejamiento (u ordenamiento, como prefiero llamarle) pueden ser establecidos a nivel de campo y sí, efectivamente Containing funciona con el ordenamiento que tenga establecido el campo en cuestión. Por lo menos sí me funciona con el ordenamiento ES_ES (español de España, México y otros países).

Saludos.

Al González.
Responder Con Cita
  #9  
Antiguo 17-06-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah ya! Pero entonces sí entra en juego el cotejamiento. Digo, porque pudiera ser que se emplease un cotejamiento para el cual la comparación con containing sí distinguiera entre mayúsculas y minúsculas.

Por cierto, en MySQL tambien se puede especificar a nivel de campo y afecta al operador LIKE.

// Saludos
Responder Con Cita
  #10  
Antiguo 17-06-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Lightbulb Like...

Cita:
Empezado por Caro Ver Mensaje
Código Delphi [-]
 Query1.SQL.Text := 'SELECT * FROM CLIENTES '+
                     'WHERE UPPER(NOMBRE) LIKE '+UpperCase(parametro)+'%'+
                     'ORDER BY NOMBRE ASC';

Y si quieres trabajar con minuscualas entonces utilizas Lower y LowerCase.

Saluditos
Aquí para no tener problemas con las letras acentuadas, la ñ, Ñ y otras yerbas sería mejor usar AnsiUpperCase y AnsiLowerCase en lugar de UpperCase y LowerCase.
La verdad que la funcion Containing no la he usado, hago algunas pruebas y veo que tal.

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #11  
Antiguo 17-06-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Probaré las diferentes opciones... de seguro alguna me sirve...
__________________
Herr Heins Faust
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Case sensitive Jcarloscgl Firebird e Interbase 7 02-08-2008 10:16:53
¿Como hacer que LIKE no sea case-sensitive? JuanBCT SQL 3 04-08-2006 21:50:28
no context-sensitive help installed elpinjum Varios 0 08-08-2005 15:07:01
Indices Con Case Sensitive RMHTECTH Tablas planas 0 06-10-2004 19:04:13
una consulta case ? Jorge Taveras Firebird e Interbase 6 27-04-2004 21:53:21


La franja horaria es GMT +2. Ahora son las 12:11:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi