From: | Gunnar Wolf <gwolf(at)gwolf(dot)org> |
---|---|
To: | Ruben Curto <rubencurto(at)virtualia(dot)com(dot)ar> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: int a date |
Date: | 2007-07-23 15:49:21 |
Message-ID: | 20070723154921.GD1728@cajita |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Ruben Curto dijo [Mon, Jul 23, 2007 at 12:52:57PM -0300]:
> Hola lista, es posible convertir un campo entero a tipo fecha?
> Ej.:
>
> # select numero::date + '10 days'::interval from tabla;
> Cannot cast type 'int4' to 'date'
Por lo que amplías en una sub-respuesta, si esta operación no es
demasiado frecuetne, te sugiero hacer una función que haga la
conversión - Es bastante ineficiente, porque trata a tu número como
una cadena, lo parte en tres sub-cadenas y lo vuelve a pegar, antes de
hacer un cast a date. Además, es asquerosamente poco
confiable... ¿Puedes jurar que en tu BD no hay ninguna fecha como
'20061510' en vez de '20061015' por poner un ejemplo?
CREATE OR REPLACE FUNCTION int_to_date(integer) RETURNS date AS
$$
DECLARE
entrada ALIAS FOR $1;
cadena char(8);
dia char(2);
mes char(2);
anio char(4);
BEGIN
cadena = entrada::text;
anio = substr(cadena,1,4);
mes = substr(cadena,5,2);
dia = substr(cadena,7,2);
RETURN (anio || '-' || mes || '-' || dia)::date;
END;
$$ language 'plpgsql';
Si vas a realizar esta operación con cierta frecuencia, claro, te
conviene correr esto sobre _toda_ tu tabla y eliminar la columna en
formato texto.
Saludos,
--
Gunnar Wolf - gwolf(at)gwolf(dot)org - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF
From | Date | Subject | |
---|---|---|---|
Next Message | Ruben Curto | 2007-07-23 15:52:57 | int a date |
Previous Message | decastro | 2007-07-23 15:43:13 | Re: Problema reiniciando servidor con pg_ctl start |