martes, 9 de noviembre de 2010

PostgreSQL: Extraer los campos de una fecha

Uno de los recursos más almacenados en las bases de datos son las fecha, existiendo ocasiones en las cuales se deben obtener algunos campos de la fecha, para este ejemplo se utilizará la tabla personas creada como se observa a continuación:

create table personas (
   id                     SERIAL      NOT NULL,
   rut                   varchar(15) NULL,
   nombre           varchar(30) NULL,
   apaterno         varchar(30) NULL,
   amaterno        varchar(30) NULL,
   fecha_nac        date   NULL,
   hora_nac         time NULL,
   sexo                 varchar(1)  NULL,
   direccion         varchar(30) NULL,
   ciudad             varchar(30) NULL,
   telefono           integer     NULL,
   created            timestamp   NOT NULL,
   modified          timestamp   NULL,
   constraint pk_personas primary key (id)
);

De esta tabla se rescataran cada uno de los campos de la creación del registro por separados y a demás se obtendrá el día de la semana al que corresponde la fecha de creación del registro.

SELECT
 rut,
 extract(year from created)::int as anyo,
 extract(month from created)::int as mes,
 extract(day from created)::int as dia,
 extract(hour from created)::int as hour,
 extract(minute from created)::int as minuto,
 extract(second from created)::int as segundo,
 CASE extract(dow from created)
  WHEN 0 THEN 'Domingo'
  WHEN 1 THEN 'Lunes'
  WHEN 2 THEN 'Martes'
  WHEN 3 THEN 'Miercoles'
  WHEN 4 THEN 'Jueves'
  WHEN 5 THEN 'Viernes'
  WHEN 6 THEN 'Sabado'
 END
 as dow
FROM
 personas
;

Con esta consulta se obtiene toda la fecha de creación desglosada completamente, a demás permite obtener el día de la semana en que fue creado utilizando el CASE que permite seleccionar entre los valores el valor obtenidos y lo convierte en una cadena con el nombre del día.

extract(campo from fuente)

Recupera los valores de una fecha/hora, donde la fuente es un campo del tipo de dato fecha/hora, en este caso en particular un timestamp, mientras que el campo es el tipo de valor recuperado de la fecha, los campos existentes en las variables de fecha/hora son los siguientes:
  • century: devuelve el siglo de la fecha, no existe siglo 0, solo existe desde el -1 al 1. Ej. el año 2000 es el siglo 20, mientras que el año 2001 es el siglo 21.
  • day: devuelve el día del mes, va desde el 1 al 31 según el mes que corresponda.
  • decade: divide el campo del año en 10. Ej. el año 2001 sería la decada 200.
  • dow: devuelve el día de la semana que va desde 0 a 6, donde el 0 corresponde al domingo.
  • doy: devuelve el día del año que va desde 1 al 365/366 según corresponda.
  • epoch: devuelve el numero de segundos desde el 1970-01-01. Este valor puede ser negativo.También se puede utilizar para obtener el numero de segundos en un intervalo de tiempo. Ej. SELECT EXTRACT(EPOCH FROM INTERVAL'5 day 3 hours');
  • hour: devuelve la hora de la fecha, este valor esta entre 0 y 23.
  • microseconds: El tiempo en segundos, incluyendo la parte fraccionaria multiplicada por 1.000.000.
  • millennium: devuelve el valor del milenio del año. Ej. el año 1990 es el milenio 2 y el año 2001 es el milenio 3.
  • milliseconds: devuelve los segundos del campo tiempo multiplicado por 1.000.
  • minute: devuelve los minutos del campo, este valor esta definido entre 0 y 59.
  • month: Para valores timestamp, devuelve el numero del mes sin el año, los valores están definidos entre 0 y 12. También permite obtener intervalos de meses. Ej. SELECT EXTRACT (MONTH FROM INTERVAL '2 years 3 months');
  • quarter: Divide el año en cuatro y devuelve valores entre 1 y 4, según el intervalo en que se encuentre el día en el año.
  • second: devuelve la cantidad de segundos incluyendo la parte fraccionaria del campo.
  • timezone: La zona horaria en UTC, medida en segundos, los valores positivos corresponden a la zona horaria este de UTC y los valores negativos a la zona horaria oeste de UTC.
  • timezone_hour: La hora correspondiente de la zona horaria.
  • timezone_minute: Los minutos correspondientes a la zona horaria.
  • week: El número de la semana del año.
  • year: devuelve el año de la fecha, no hay año 0, así que hay años antes de Cristo y después de Cristo.
"Gracias, por compartir tus conocimientos" 

    1 comentario: