Ver Mensaje Individual
  #9 (permalink)  
Antiguo 17/11/2009, 07:23
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Formato de Fecha en Postgres

Con un ejemplo:

Código sql:
Ver original
  1. pruebas=> CREATE TABLE table1(fecha TIMESTAMP);
  2. CREATE TABLE
  3. pruebas=> INSERT INTO table1 VALUES('2009-01-01');
  4. INSERT 0 1
  5. pruebas=> INSERT INTO table1 VALUES('2009-02-01');
  6. INSERT 0 1
  7. pruebas=> INSERT INTO table1 VALUES('2009-03-01');
  8. INSERT 0 1
  9. pruebas=> INSERT INTO table1 VALUES('2009-04-01');
  10. INSERT 0 1
  11. pruebas=> INSERT INTO table1 VALUES('2009-05-01');
  12. INSERT 0 1
  13. pruebas=> INSERT INTO table1 VALUES('2009-06-01');
  14. INSERT 0 1
  15. pruebas=> INSERT INTO table1 VALUES('2009-07-01');
  16. INSERT 0 1
  17. pruebas=> INSERT INTO table1 VALUES('2009-08-01');
  18. INSERT 0 1
  19. pruebas=> INSERT INTO table1 VALUES('2009-09-01');
  20. INSERT 0 1
  21. pruebas=> INSERT INTO table1 VALUES('2009-10-01');
  22. INSERT 0 1
  23. pruebas=> INSERT INTO table1 VALUES('2009-11-01');
  24. INSERT 0 1
  25. pruebas=> INSERT INTO table1 VALUES('2009-12-01');
  26. INSERT 0 1
  27. pruebas=> SELECT fecha FROM table1;
  28.         fecha
  29. ---------------------
  30.  2009-01-01 00:00:00
  31.  2009-02-01 00:00:00
  32.  2009-03-01 00:00:00
  33.  2009-04-01 00:00:00
  34.  2009-05-01 00:00:00
  35.  2009-06-01 00:00:00
  36.  2009-07-01 00:00:00
  37.  2009-08-01 00:00:00
  38.  2009-09-01 00:00:00
  39.  2009-10-01 00:00:00
  40.  2009-11-01 00:00:00
  41.  2009-12-01 00:00:00
  42. (12 filas)
  43.  
  44. pruebas=> CREATE OR REPLACE FUNCTION xcambio_fecha(TIMESTAMP)
  45. pruebas-> RETURNS VARCHAR AS $body$
  46. pruebas$> DECLARE
  47. pruebas$>     var_fecha alias FOR $1;
  48. pruebas$>     res_fecha record;
  49. pruebas$> BEGIN
  50. pruebas$>     SELECT INTO res_fecha (CASE
  51. pruebas$>     WHEN EXTRACT(MONTH FROM var_fecha)=1 THEN (EXTRACT(DAY FROM var_fecha)||'-Ene-'||extra
  52. ct(YEAR FROM var_fecha))::VARCHAR
  53. pruebas$>     WHEN EXTRACT(MONTH FROM var_fecha)=4 THEN (EXTRACT(DAY FROM var_fecha)||'-Abr-'||extra
  54. ct(YEAR FROM var_fecha))::VARCHAR
  55. pruebas$>     WHEN EXTRACT(MONTH FROM var_fecha)=8 THEN (EXTRACT(DAY FROM var_fecha)||'-Ago-'||extra
  56. ct(YEAR FROM var_fecha))::VARCHAR
  57. pruebas$>     WHEN EXTRACT(MONTH FROM var_fecha)=12 THEN (EXTRACT(DAY FROM var_fecha)||'-Dic-'||extr
  58. act(YEAR FROM var_fecha))::VARCHAR
  59. pruebas$>     ELSE to_char(var_fecha,'dd-Mon-YYYY')
  60. pruebas$>     END) AS fecha;
  61. pruebas$>
  62. pruebas$>     RETURN res_fecha.fecha::VARCHAR;
  63. pruebas$> END;
  64. pruebas$> $body$ LANGUAGE 'plpgsql';
  65. CREATE FUNCTION
  66. pruebas=> SELECT xcambio_fecha(fecha) FROM table1;
  67.  xcambio_fecha
  68. ---------------
  69.  1-Ene-2009
  70.  01-Feb-2009
  71.  01-Mar-2009
  72.  1-Abr-2009
  73.  01-May-2009
  74.  01-Jun-2009
  75.  01-Jul-2009
  76.  1-Ago-2009
  77.  01-Sep-2009
  78.  01-Oct-2009
  79.  01-Nov-2009
  80.  1-Dic-2009
  81. (12 filas)

Como bien dice xdrtas la función now() devuelve un timestamp with time zone y mas que la fecha y la hora, también devuleve la zona horaria.

Código sql:
Ver original
  1. pruebas=> SELECT now();
  2.             now
  3. ----------------------------
  4.  2009-11-17 08:17:50.046-05
  5. (1 fila)

El -05 indica mi zona horaria Bogotá-Lima-Quito.

Como el campo que hemos declarado como entrada de la función es necesario hacer el respectivo casteo de timestamp with time zone a timestamp.

Código sql:
Ver original
  1. pruebas=> SELECT xcambio_fecha(now());
  2. ERROR:  FUNCTION xcambio_fecha(TIMESTAMP WITH TIME zone) does NOT exist
  3. LINEA 1: SELECT xcambio_fecha(now());
  4.                 ^
  5. HINT:  No FUNCTION matches the given name AND argument types. You may need TO ADD explicit TYPE CAST
  6. s.
  7. pruebas=> SELECT xcambio_fecha(now()::TIMESTAMP);
  8.  xcambio_fecha
  9. ---------------
  10.  17-Nov-2009
  11. (1 fila)

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming