Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ¿Como pasar de VARCHAR a DATE? (https://www.clubdelphi.com/foros/showthread.php?t=13622)

Durbed 25-08-2004 10:58:40

¿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.

guillotmarc 25-08-2004 11:04:34

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

Durbed 25-08-2004 16:29:40

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.

jachguate 25-08-2004 19:09:39

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.

;)

VolaRe 25-08-2004 22:39:31

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

guillotmarc 25-08-2004 23:49:12

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.

Durbed 26-08-2004 15:15:37

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

guillotmarc 26-08-2004 16:57:35

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.


La franja horaria es GMT +2. Ahora son las 03:06:19.

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