Lists: | ecpug |
---|
From: | Fernando Siguenza <fsigu(at)hotmail(dot)com> |
---|---|
To: | Foros Postgre Ecuador <ecpug(at)postgresql(dot)org> |
Subject: | Trabajar con campos tipo fecha |
Date: | 2010-06-02 21:26:11 |
Message-ID: | SNT108-W33DB3194AA69134F85E9D6A1D00@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | ecpug |
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??
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
y cuando hago una consulta y pongo algo asi
select * from tabla where fecha = to_date(''20100507,'yyyymmdd')
no me da ningun registro, cuando me deberia dar al menos uno.
Mi otra duda como seria la forma correcta de hacer las consultas sobre campos de tipo fecha??
Saludos
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
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 |
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