Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Firebird: Problema con LIKE (https://www.clubdelphi.com/foros/showthread.php?t=40768)

rretamar 26-02-2007 18:32:39

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...

ArdiIIa 26-02-2007 19:00:10

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

rretamar 26-02-2007 20:01:47

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....

ArdiIIa 26-02-2007 20:04:58

Pues a primera vista, parece que no tienes registros que cumplan esa condición ??

rretamar 26-02-2007 21:24:08

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....

ArdiIIa 26-02-2007 21:46:25

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...

TJose 27-02-2007 01:54:18

Qué sucede si cambias char(30) por varchar(30)

TJose

Lepe 27-02-2007 13:42:24

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

rretamar 27-02-2007 18:36:23

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, :)

Lepe 27-02-2007 20:24:26

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

rretamar 01-03-2007 05:50:27

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...

rastafarey 07-03-2007 18:47:57

Resp
 
No era necesaro borrar los registro

Simplemte debias actualizar el campo con un sql usando la funcion trim


La franja horaria es GMT +2. Ahora son las 07:47:51.

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