![]() |
SELECT con SUBSTRING en Firebird
Tengo este query:
A la hora de tratar de ejecuatrlo, tanto desde programa como con IBManager, me da este error: Cita:
|
Esto:
LEFT JOIN Bancos H ON SUBSTRING(A.Iban FROM 5 FOR 4) = H.Codigo AND A.IdCuenta = 'A' ¿No debería ir así? LEFT JOIN Bancos H ON (SUBSTRING(A.Iban FROM 5 FOR 4) = H.Codigo) AND (A.IdCuenta = 'A') |
|
Hay que tener en cuenta que existe unas UDF que implementan el substring y lo usan de una forma diferente, así que es bueno ver que en los códigos del UDF no se encuentre creado substring, también sría bueno saber que versión de Firebird usa? H.Codigo es un string o un int?
Por último y aunque no creo que afecte mucho podrías cambiar el orden a lo siguiente:
|
Gracias por las respuestas.
Cita:
Cita:
Cita:
|
¡Mi gozo en un pozo!
Al margen de que, efectivamente, había renombrado alguna columna y se me había olvidado el problema no era esa. Sigue dándome el mismo error; por si acaso he actualizado a la versión 2.5.4 de Firebird. Voy más allá: Estoy probando este otro código:
Las tablas son estas: Cita:
Cita:
Hasta donde veo el código es correcto; de hecho en una BB.DD. Paradox funciona sin ningún problema. Sin embargo usando tanto IBManager como IBExpert me da el mismo error: Cita:
|
Si hace falta y alguien me puede ayudar le mando las tablas implicadas.
|
Es que por lo visto tiene que ser "select substring" no en un "where".
Puedes crearte un Stored Procedure, algo asi como:
|
Hola Angel.Matilla.
Algo mas debe haber en juego. Reproduje la situación como la planteaste, ejecutando la misma consulta y no me dá ningún error. Ambiente: Código:
Windows 7 32 bit. Tabla PAISES: Código:
CODIGO NOMBRE Código:
ENTIDAD NOMBRE BIC
Resultado: Código:
ENTIDAD NOMBRE BIC Saludos :) |
A mi también me corre bien el query así tal cual está, con esos tipos de datos (osea BIC varchar(12) y CODIGO varchar(3),
por otro lado el query no es optimo y con muchos registros en ambas tamblas podría tomar mucho tiempo, lo puedes cambiar a algo similar a esto:
|
Gracias a todos por las respuestas.
Cita:
Código SQL [-]SELECT SUBSTRING(Bic FROM 5 FOR 2) FROM Bancos me da el mismo error Cita:
Cita:
Cita:
Cita:
|
A lo mejor digo una tontería: ¿Puede tener algo que ver con la definición de la base de datos? Es que no se me ocurre otra cosa. La definición, que se hace por código, es esta:
Código:
IBDatabase1->Params->Clear(); |
Hola Angel.Matilla
Cita:
Código PHP:
Cita:
Cita:
Cita:
¿ Has intentado reinstalar Firebird ? Saludos :) |
Hola
divide y vencerás. Yo no veo nada raro en la query. Si haces SELECT SUBSTRING(BIC FROM 5 FOR 3) FROM BANCOS tiene que darte los códigos de los países. Si haces SELECT CODIGO FROM PAISES tiene que darte los códigos también. si haces SELECT SUBSTRING(B.BIC FROM 5 FOR 3) FROM BANCOS B inner join PAISES P ON ( SUBSTRING(B.BIC FROM 5 FOR 3) = P.codigo) tiene que darte los códigos de los países que reconcilian en las dos tablas. Si has llegado hasta aqui, no vas mal. Si en lugar de INNER JOIN pones LEFT JOIN.... y añades una pequeña condición... tienes tu consulta. Esto debe funcionar desde la versión 0 de FB, no lo aseguro pero me apostaría un Kas de limón. Ya nos contarás. Postea tus resultados. Un saludo |
Cita:
|
Cita:
O una Konga naranja :D Cuánto ha llovido.... sniff |
Gracias por vuestras respuestas. El Kas, la Mirinda o la Konga la pago yo si arreglo el follón :).
Cita:
En la definición de las tablas me he dado cuenta que se me olvidó aclarar una cosa: Los campos VARCHAR están dimensionados con exceso; es decir: tuve que poner en toos los VARCHAR de la base de datos una posición más de las necesarias porque, y tampocó sé la razón, si los ponía justos al hacer un SELECT del tipo LIKE '99%' me daba error. Así pues el código de país realmente tiene dos posiciones: ES para España, FR para Francia, US para los Estados Unidos, etc. En ese sentido ecfisa tiene razón en que el resultado de su query es coherente; ¡error mío! Cita:
Cita:
Cita:
Cita:
|
Hola,
sin mucha convicción te lo digo. Has eliminado la dll de firebird de donde proceda?. fbclient.dll . Búscala, bórrala y sustituyela por la incluida en la última versión que hayas instalado. Podría ser que tengas mezcladas versiones de fb y la librería cliente. Saludos |
Desde luego que "normal" no es eso.
|
Parece ser que todo es debido a una instalación anterior de Interbase XE que juraría había desinstalado. Aunque no estaba conectado el servidor, la base de datos se ha creado como si fuera de Interbase o eso es lo que me han indicado desde EMS:
Cita:
|
La franja horaria es GMT +2. Ahora son las 05:50:18. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi