Re: Trabajar con campos tipo fecha

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Fernando Siguenza <fsigu(at)hotmail(dot)com>
Cc: Foros Postgre Ecuador <ecpug(at)postgresql(dot)org>
Subject: Re: Trabajar con campos tipo fecha
Date: 2010-06-04 07:09:17
Message-ID: AANLkTilkrrsG-0OR1Jv0jHxaPwmy3tsy5pJH4UA_dCQ6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: ecpug

2010/6/2 Fernando Siguenza <fsigu(at)hotmail(dot)com>:
> Amigos como estan, tengo un problema al trabajar con campos de tipo fecha,
> tengo una tabla con un campo fecha de tipo date, cuando almaceno la
> informacion aqui no se porque se almacena en el formato año dia y mes, lo
> raro que en otra tabla igual de tipo date me almacena la informacion en
> formato año mes y dia.
>
> Como puedo configurar para que siempre me almacene en un solo formato??
>

PostgreSQL siempre almacena la fecha en el mismo formato: año-mes-dia

lo que ocurre es que cuando vas a mostrar la fecha o vas a ingresar
una fecha usa la variable DATESTYLE (que esta configurada en el
archivo postgresql.conf y que puedes modificar manualmente mediante el
comando SET) para determinar como la va a mostrar o como interpretar
la entrada...

la variable DATESTYLE tiene dos componentes: formato de salida,
formato de entrada (ie: 'iso, mdy')

el primer componente de DATESTYLE controla como se vera la fecha al
mostrarla. por ejemplo, el predeterminado ISO muestra la fecha en
formato año-mes-dia... formatos de salida validos son: ISO, SQL,
postgres, german

el segundo componente controla el formato de entrada y basicamente le
dice como interpretar la entrada. Por ejemplo, el predeterminado MDY
le indica que primero debe esperar el mes, luego el dia y al final el
año. formatos de entrada validos son: MDY, DMY, YMD

para saber como esta seteado DATESTYLE ejecuta: show datestyle;
para cambiar el valor de DATESTYLE ejecuta: SET datestyle TO 'iso, dmy';
o solo uno de los componentes: SET datestyle TO 'sql'; o SET datestyle TO 'ymd';

intenta jugar con esos valores un poco para que veas lo que resulta al
cambiarlos...

> Igual en la primera opcion en la que me almacena año dia y mes tengo datos
> como este
> 2010-06-05
> 2010-07-05
> 2010-08-05
>

mmm... seguro? no consigo ese resultado de salida con ninguno de los
valores de datestyle, podrias mostrar el resultado de ejecutar: SHOW
DATESTYLE;

honestamente, pienso que has grabado mal los datos trataste de grabar
datos en formato 'dd-mm-yyyy' (ej: 06-05-2010) pero como el formato de
entrada predeterminado de postgres es MDY el entendio que el 6 era el
mes y el 5 el dia. deberias haber tenido problemas al tratar de grabar
13-05-2010

una forma de probar mi teoria es ejecutar (encontraras que lo que
crees es el dia en realidad esta grabado como mes y viceversa):
select extract(day from fecha), extract(month from fecha),
extract(year from fecha)
from tabla

> y cuando hago una consulta y pongo algo asi
> select * from tabla where fecha = to_date(''20100507,'yyyymmdd')
>

estas cayendo en el mismo problema

> no me da ningun registro, cuando me deberia dar al menos uno.
>

no, no deberia. por que el 5 que tu crees es el mes esta grabado como dia

> Mi otra duda como seria la forma correcta de hacer las consultas sobre
> campos de tipo fecha??
>

select * from tabla where fecha = '2010-05-07'

si lo pones asi, postgres adivina facilmente: año-mes-dia

--
Jaime Casanova www.2ndQuadrant.com
Soporte y capacitación de PostgreSQL

In response to

Browse ecpug by date

  From Date Subject
Next Message mauricio.montufar 2010-06-04 14:00:55 Capacitacion
Previous Message Jaime Casanova 2010-06-03 23:14:49 Re: migrar base Oracle a PostgreSQL