Re: int a date

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

In response to

  • int a date at 2007-07-23 15:52:57 from Ruben Curto

Browse pgsql-es-ayuda by date

  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