FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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... |
#2
|
||||
|
||||
todos los que acaban en 46
Todos los que comienzan por 46 Todos los que contienen 46 --- También valido like '%46%'
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO Última edición por ArdiIIa fecha: 26-02-2007 a las 19:04:03. |
#3
|
||||
|
||||
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.... Última edición por rretamar fecha: 26-02-2007 a las 20:07:44. |
#4
|
||||
|
||||
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 |
#5
|
||||
|
||||
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.... |
#6
|
||||
|
||||
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 No entiendo porque te puede pasar...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
#7
|
|||
|
|||
Qué sucede si cambias char(30) por varchar(30)
TJose |
#8
|
||||
|
||||
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. |
#9
|
||||
|
||||
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, |
#10
|
||||
|
||||
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. |
#11
|
||||
|
||||
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... |
#12
|
||||
|
||||
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. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema de UDF en Firebird 2.0 | Kipow | Firebird e Interbase | 2 | 14-04-2008 16:34:51 |
Problema con FireBird | AGAG4 | Firebird e Interbase | 11 | 02-04-2005 01:26:23 |
Problema C# y Firebird | AdrianD | .NET | 6 | 07-09-2004 23:40:38 |
PROBLEMA CON SQL de FIREBIRD | laaccaal | SQL | 0 | 12-08-2004 17:52:12 |
Problema en Firebird con dialecto 3 | Leonidas | Firebird e Interbase | 1 | 24-07-2004 07:43:35 |
|