![]() |
Problemas con CAST y campos tipo DATE
Buenos días, llevo un buen rato buscando en el foro y no encuentro hilo que me ayude, así que lanzo este nuevo para ver si me pueden ayudar...
Tengo en mi aplicación una exportación a TXT desde una pantalla que ejecuta sentencias SQL, la peculiaridad es que esta exportación mediante "CAST" mantiene el tamaño de los campos y me es muy útil para implementar normas bancarias, exportaciones a programas de contabilidad, etc... La cuestión es, tengo que realizar una exportación a una aplicación contable, y me estan dando problemas los campos tipo fecha. Necesito hacerlo con un CAST ... as VARCHAR(x), ya que mi aplicación reconoce el "largo" del campo (x) y lo rellena con vacíos para mantener la estructura que me solicitan. Así pues si tengo en mi base de datos Firebird una fecha almacenada como 19/01/2007 y hago en mi consulta un CAST (FECHA AS VARCHAR(10)) AS FECHA firebird me devuelve 19-JAN-200 ni tan siquiera me muestra completo el año ya que el tamaño requerido es 10 y en el mes usa 3 caracteres. El formato que busco es el mismo que muestra firebird, es decir 19/01/2007 pero con cast, substr y alguna otra función más me ha sido imposible de obtener. Agradecería cualquier ayuda! :D |
Hola.
Firebird no tiene ningún formato, cuando ves que te muestra 19/01/2007 eso es porqué este es el formato de fecha que tienes definido en la configuración regional de tu Windows. Utiliza esta sentencia para pasar al formato que quieres. select substring(100 + extract(day from FECHA) from 2 for 2) || '/' || substring(100 + extract(month from FECHA) from 2 for 2) || '/' || extract(year from FECHA) from TABLA Es un poco largo pero funciona perfectamente, y no conozco ninguna forma mejor de hacerla (quizás otro compañero la sepa). Saludos. |
Por cierto, si te preguntas porqué sumo 100 a los días y meses y después lo corto con un SUBSTRING, eso es para que me quede en este formato :
12/03/2010 También podrías haber usado select extract(day from FECHA) || '/' || extract(month from FECHA) || '/' || extract(year from FECHA) from TABLA Es más sencillo, pero habría quedado : 12/3/2010 Saludos. |
Eres Muuuuuuuuuuuuuuuuuuuuuy Grande!!
Muchas gracias! Lo solucionaste! Jeje Gracias de nuevo!!!!!!!! |
Añadiendo el pertinente CAST para que mi aplicación "reserve" el tamaño claro!
XD Thanks de nuevo! |
Por cierto... Adjunto una segunda opción que me ha pasado un compañero sabedor de mi problema...
select cast(DateToStr(fecha,'%d/%m/%Y') as varchar(10)) from tabla También funciona y es mas "light", jejeje. Gracias a los 2 de todos modos. |
Gracias por compartirlo,
No conocía esta función DateToStr. En mi Firebird 2.0 no funciona, supongo que la han añadido posteriormente. Saludos. |
Pues yo tampoco he visto dicha función, de hecho... acabo de probarla en FB 2.5 y no funciona. Para mi que debe ser alguna UDF que han instalado en dicho server.
|
Pequeña variante...
Srs:
Me quedo con la solución de guillotmarc, pero sin utilizar las sumas.
Prefiero NO utilizar funciones UDF, desde que tuve un pequeño inconveniente al utilizar una función UDF desde un servidor de Windows a uno de Linux que no funcionaban igual en ambas plataformas. De esta manera, si voy a cambiar una base de datos de una plataforma a otra simplemente hago un "backup" y un "restore", y todo mundo feliz de la vida :D. Espero que sirva de algo... saludos a todo el foro. Gerardo Suárez Trejo |
La franja horaria es GMT +2. Ahora son las 05:28:17. |
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