Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 26/02/2007
rretamar's Avatar
[rretamar] rretamar is offline
Miembro Premium
 
Join Date: Aug 2006
Location: San Francisco, Córdoba, Argentina
Posts: 1,168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Unhappy Firebird: Problema con LIKE

Hola.
Estoy usando Firebird 1.5 con una tabla, ejecutando una sentencia LIKE de la siguiente forma:

Select * From Tabla
Where Campo Like '%6000'

Campo es un campo de tipo cadena (string), y en distintos registros están los valores 426000, entre otros. En este caso, la consulta me devuelve cero registros, mientras que si uso (por ejemplo) LIKE '426%' sí me funciona.

La pregunta es entonces: ¿ El caracter "comodín" (wilcard) % no funciona al inicio ?.

Saludetes...
Reply With Quote
  #2  
Old 26/02/2007
ArdiIIa's Avatar
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Join Date: Nov 2003
Location: Valencia city
Posts: 1,481
Poder: 24
ArdiIIa Va por buen camino
todos los que acaban en 46
Código SQL [-]
SELECT * FROM CODIGOS_POSTALES
WHERE CODIGO like '%46'
ORDER BY CODIGO
Todos los que comienzan por 46
Código SQL [-]
SELECT * FROM CODIGOS_POSTALES
WHERE CODIGO like '46%'
ORDER BY CODIGO
Todos los que contienen 46 --- También valido like '%46%'
Código SQL [-]
SELECT * FROM CODIGOS_POSTALES
WHERE CODIGO CONTAINING '46'
ORDER BY CODIGO
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO

Last edited by ArdiIIa : 26/02/2007 at 19:04.
Reply With Quote
  #3  
Old 26/02/2007
rretamar's Avatar
[rretamar] rretamar is offline
Miembro Premium
 
Join Date: Aug 2006
Location: San Francisco, Córdoba, Argentina
Posts: 1,168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Red face

A primera vista debería ser así, pero de las opciones que pones, la primera es la que me devuelve como resultado cero registros.

A la consulta la tipeo directamente desde el editor de SQL de IbExpert.

Saludetes....

Last edited by rretamar : 26/02/2007 at 20:07.
Reply With Quote
  #4  
Old 26/02/2007
ArdiIIa's Avatar
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Join Date: Nov 2003
Location: Valencia city
Posts: 1,481
Poder: 24
ArdiIIa Va por buen camino
Pues a primera vista, parece que no tienes registros que cumplan esa condición ??
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Reply With Quote
  #5  
Old 26/02/2007
rretamar's Avatar
[rretamar] rretamar is offline
Miembro Premium
 
Join Date: Aug 2006
Location: San Francisco, Córdoba, Argentina
Posts: 1,168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Aclaración: Campo es del tipo Char[30]

Sí, existen registros que cumplen la condición. La única forma de obtener resultados es hacer lo siguiente:

Select * From Tabla
Where Campo Like '%6000 ......24 espacios...... '

Porque como decía antes, si hago:

Select * From Tabla
Where Campo Like '%6000'

No obtengo resultados

Lo extraño es que al momento de cargar un valor en el campo, no he cargado esos espacios al final (al editar la tabla en una grilla tampoco aparecen). Estoy usando INSERT INTO para cargar los valores.

Saludetes....
Reply With Quote
  #6  
Old 26/02/2007
ArdiIIa's Avatar
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Join Date: Nov 2003
Location: Valencia city
Posts: 1,481
Poder: 24
ArdiIIa Va por buen camino
Una aclaración... en lo de antes...
También valido like '%abc%' no es lo mismo que '%ABC%', en cambio en CONTAINING esto no importa....


En lo que me comentas
Código SQL [-]
Select * From Tabla
Where Campo Like '%6000 ......24 espacios...... '
No entiendo porque te puede pasar...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Reply With Quote
  #7  
Old 27/02/2007
TJose TJose is offline
Miembro
 
Join Date: May 2003
Posts: 162
Poder: 24
TJose Va por buen camino
Qué sucede si cambias char(30) por varchar(30)

TJose
Reply With Quote
  #8  
Old 27/02/2007
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Precisamente ahí está el truquito.

Cualquier campo declarado con char(30) la base de datos lo rellena con espacios, hasta el límite declarado (en este caso 30).

Sin embargo con varchar(30) la base de datos se comportará exactamente como deseas, solo guardará los carácteres que hayas introducido (sin rellenar con espacios).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #9  
Old 27/02/2007
rretamar's Avatar
[rretamar] rretamar is offline
Miembro Premium
 
Join Date: Aug 2006
Location: San Francisco, Córdoba, Argentina
Posts: 1,168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Thumbs up Gracias !

Muchas gracias a todos los que respondieron.

He realizado la misma prueba usando el dialecto SQL local del BDE (con una ta bla Paradox) y el error no se produce.

Es evidente que se me está rellenando con espacios el resto de los caracteres del campo.

Probaré reemplazar CHAR por VARCHAR (confieso que nunca usé ese tipo de datos). ¿ Este cambio puede tener algún inconveniente en cuanto a performance, espacio ocupado o algo similar ?

Saludos cordiales desde Argentina,
Reply With Quote
  #10  
Old 27/02/2007
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Inconvenientes ninguno, eso si, deberás usar el collate ES_ES (o el de tu país), pero vamos, que eso es normal en char o varchar. Te sugiero crear un dominio y partir de ahí, ya que te será más cómodo asignar un dominio que establecer todas las propiedades a mano .

Incluso se podría decir que es más eficiente, ya que el SGBD no tendrá que añadir espacios ni quitarlos al mostrar los datos.

Quizás al pasar los datos del campo char hacia el campo varchar se incluyan esos espacios en blanco, no lo sé porque no he trabajado con tipos char.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #11  
Old 01/03/2007
rretamar's Avatar
[rretamar] rretamar is offline
Miembro Premium
 
Join Date: Aug 2006
Location: San Francisco, Córdoba, Argentina
Posts: 1,168
Poder: 23
rretamar Va camino a la famarretamar Va camino a la fama
Thumbs up Eureka !!!

Probé modificar los campos CHAR[30] por VARCHAR[30] en registros ya existentes pero el resultado fue el mismo (como si al realizar el cambio de formato del campo, los espacios en blanco siguieran estando al final del valor).

Entonces borré todos los registros (es una tabla de pruebas...), como para empezar a insertar directamente valores en los campos VARCHAR[30] y voila !!! ahora puedo usar LIKE '%STRING' y obtener los resultados esperados.

Muchas gracias por la ayuda recibida.

Saludos desde Argentina...
Reply With Quote
  #12  
Old 07/03/2007
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
Resp

No era necesaro borrar los registro

Simplemte debias actualizar el campo con un sql usando la funcion trim
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Problema de UDF en Firebird 2.0 Kipow Firebird e Interbase 2 14/04/2008 16:34
Problema con FireBird AGAG4 Firebird e Interbase 11 02/04/2005 01:26
Problema C# y Firebird AdrianD .NET 6 07/09/2004 23:40
PROBLEMA CON SQL de FIREBIRD laaccaal SQL 0 12/08/2004 17:52
Problema en Firebird con dialecto 3 Leonidas Firebird e Interbase 1 24/07/2004 07:43


All times are GMT +2. The time now is 05:46.


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