sábado, 10 de enero de 2009

fecha a literal (texto)

Muchas veces se necesita presentar una fecha en forma literal es decir en palabras, a veces con o sin el dia, a continuacion se presenta una funcion que realiza la conversion de una fecha YYYY-MM-DD a palabras nombre_dia dia de mes de año





POSTGRES SQL

CREATE OR REPLACE FUNCTION _fecha_literal(_fecha date, _dia integer) RETURNS text AS $$
-- _dia =0/1   sin/con el dia de la semana
------------------------
-- Autor: Luis Jordan P.
------------------------

declare
  _salida text;
begin
SELECT
  CASE WHEN _dia=1 THEN
    CASE WHEN rtrim(to_char(_fecha, 'day'))='sunday' THEN 'domingo '
           WHEN rtrim(to_char(_fecha, 'day'))='monday' THEN 'lunes '
           WHEN rtrim(to_char(_fecha, 'day'))='tuesday' THEN 'martes '
           WHEN rtrim(to_char(_fecha, 'day'))='wednesday' THEN 'miercoles '
           WHEN rtrim(to_char(_fecha, 'day'))='thursday' THEN 'jueves '
           WHEN rtrim(to_char(_fecha, 'day'))='friday' THEN 'viernes '
           WHEN rtrim(to_char(_fecha, 'day'))='saturday' THEN 'sabado '
      ELSE ''
      END
  ELSE ''
  END
  ||
  extract(day from _fecha) || ' de ' ||
    CASE WHEN extract(month from _fecha) =01 THEN 'enero'
         WHEN extract(month from _fecha) =02 THEN 'febrero'
         WHEN extract(month from _fecha) =03 THEN 'marzo'
         WHEN extract(month from _fecha) =04 THEN 'abril'
         WHEN extract(month from _fecha) =05 THEN 'mayo'
         WHEN extract(month from _fecha) =06 THEN 'junio'
         WHEN extract(month from _fecha) =07 THEN 'julio'
         WHEN extract(month from _fecha) =08 THEN 'agosto'
         WHEN extract(month from _fecha) =09 THEN 'septiembre'
         WHEN extract(month from _fecha) =10 THEN 'octubre'
         WHEN extract(month from _fecha) =11 THEN 'noviembre'
         WHEN extract(month from _fecha) =12 THEN 'diciembre'
     END
      || ' de ' || extract(year from _fecha)  
        
  INTO _salida;
  return _salida;
end; $$ LANGUAGE plpgsql;

SELECT _fecha_literal('2007-12-10'::date, 1);

Resultado:
lunes 10 de diciembre de 2007

No hay comentarios: