Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
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!
Responder Con Cita
  #2  
Antiguo 12-03-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 12-03-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 12-03-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Eres Muuuuuuuuuuuuuuuuuuuuuy Grande!!

Muchas gracias! Lo solucionaste! Jeje

Gracias de nuevo!!!!!!!!
Responder Con Cita
  #5  
Antiguo 12-03-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
Añadiendo el pertinente CAST para que mi aplicación "reserve" el tamaño claro!


XD


Thanks de nuevo!
Responder Con Cita
  #6  
Antiguo 12-03-2010
Kubelo Kubelo is offline
Miembro
 
Registrado: feb 2010
Posts: 58
Poder: 15
Kubelo Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 12-03-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 12-03-2010
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
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.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 12-03-2010
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Talking Pequeña variante...

Srs:

Me quedo con la solución de guillotmarc, pero sin utilizar las sumas.
Código SQL [-]
select lpad(extract(day from FECHA),2,'0') || '/' || lpad(extract(month from FECHA),2,'0') || '/' || extract(year from FECHA)
from TABLA

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 .

Espero que sirva de algo... saludos a todo el foro.

Gerardo Suárez Trejo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas de agrupamientos con campos tipo date GustavoCruz Conexión con bases de datos 5 11-12-2006 17:36:57
problemas con campos Tipo Blob morfeo21 Firebird e Interbase 0 18-07-2005 18:06:54
Problemas con campos tipo TEXT bustio Conexión con bases de datos 3 08-02-2005 16:40:50
Problema con IBTable y campos de tipo date y time erickperez6 Conexión con bases de datos 4 14-02-2004 03:22:22
Problemas con Query campo tipo Date "Oracle" Marrano Oracle 4 27-05-2003 12:09:56


La franja horaria es GMT +2. Ahora son las 04:50:46.


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
Copyright 1996-2007 Club Delphi