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 25-08-2004
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Exclamation ¿Como pasar de VARCHAR a DATE?

Tengo que hacer una consulta para pasar datos de una tabla antigua a otra nueva, y el problema es que en la antigua el campo fecha esta almacenado en un VARCHAR y en la actual esta en un DATE. Como puedo resolverlo.

Gracias.
Responder Con Cita
  #2  
Antiguo 25-08-2004
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.

¿ Has probado con CAST ?

cast(CAMPO as datetime)

El problema es que imagino que solo hara la transformación si está en un formato reconocible por el motor de Firebird, es decir : mm/dd/yyyy

Saludos
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 25-08-2004
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
El problema es que el formato es diferente

Esta asi yymmdd, por ejemplo en lugar de poner 25/02/2004 --> 040225

Alguna idea de hacerlo mediante SQL, utilizo interbase 6.
Responder Con Cita
  #4  
Antiguo 25-08-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Si tenes instalada alguna udf que te incluya la función substr o alguna equivalene podrias hacer algo como:

cast(substr(fecha, 3, 2)||'/'||substr(fecha, 6, 2)||'/20'||substr(fecha, 1, 2) as Date)

he asumido, en este caso, que todas las fechas seran superiores al 1/1/2000.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 25-08-2004
Avatar de VolaRe
VolaRe VolaRe is offline
Miembro
 
Registrado: ago 2003
Posts: 121
Poder: 21
VolaRe Va por buen camino
Unhappy Una curiosidad

¿Y porque no usa el StrToDate o StrToDateTime? y una vez pasado a TDateTime lo inserta en el campo.
Yo la funcion Cast() no la entiendo si me despejais mis dudas os lo agradeceria
Responder Con Cita
  #6  
Antiguo 25-08-2004
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.

Cita:
Empezado por VolaRe
¿Y porque no usa el StrToDate o StrToDateTime? y una vez pasado a TDateTime lo inserta en el campo.
Yo la funcion Cast() no la entiendo si me despejais mis dudas os lo agradeceria
Es que ese código no va en un programa Delphi, sinó en una consulta SQL. Por eso no puede utilizar las funciones de Delphi (como StrToDateTime) sinó que debe usar las funciones disponibles en su Servidor SQL (en este caso Interbase 6).

CAST es la función SQL estándar para cambiar de tipo un valor.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 26-08-2004
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Problema con SUBSTRING

He puesto el siguiente codigo en SQL y me da ese error. Cual es el problema, porque dice que no esta la funcion SUBSTRING, pero me la coje como valida en la sintaxis y ademas esta en la ayuda.

Código:
/************************ERROR**************************************************
 The next statement causes the following error: 
 
 An error was found in the application program input parameters for the SQL statement.
 SQL error code = -804.
 Function unknown.
 SUBSTRING.
 SQL warning code = 301.
 DATE data type is now called TIMESTAMP.
 *******************************************************************************/
 insert into movim_o2 (fecha2)
 select cast(substring(fecha, 5, 2)||'/'||substring(fecha, 3,2)||'/20'||substring(fecha, 1, 2) as date)
 from movim_o2;
Gracias
Responder Con Cita
  #8  
Antiguo 26-08-2004
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.

Tienes un aviso y un error. El aviso te indica que en lugar de indicar el tipo date utilizes el tipo timestamp (a continuación del as del cast).

El error te indica que no reconoce la función substring. Como ya comentó jachguate, esta función no viene integrada en Interbase 6, por lo que la tienes que añadir mediante una udf.

Revisa las udf's que vienen con Interbase 6 (ibudf.dll) para ver si tienen disponible esa función. En caso contrario tendrás que bajarte una libreria que si la incorpore.

http://www.cvalde.net/misc/packages_and_utilities.htm

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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


La franja horaria es GMT +2. Ahora son las 22:30:55.


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