Partes de fecha para funciones de fecha o marca temporal
En la siguiente tabla, se identifican los nombres y las abreviaturas de partes de fecha y de hora que se aceptan como argumentos para las siguientes funciones:
-
DATEADD
-
DATEDIFF
-
DATE_PART
-
EXTRACT
Parte de la fecha o parte de la hora | Abreviaturas |
---|---|
milenio, milenios | mil, mils |
siglo, siglos | c, cent, cents |
década, décadas | dec, decs |
tiempo Unix | fecha de inicio (compatible con EXTRACT) |
año, años | y, yr, yrs |
trimestre, trimestres | qtr, qtrs |
mes, meses | mon, mons |
semana, semanas | w |
día de la semana |
dayofweek, dow, dw, weekday (compatibles con DATE_PART y Función EXTRACT) Devuelve un número entero de 0 a 6, comenzando por domingo. notaLa parte de la fecha DOW se comporta de manera diferente a la parte de fecha (D) que se usa para las cadenas de formato de fecha y hora. D se basa en los números enteros de 1 a 7, donde domingo es 1. Para obtener más información, consulte Cadenas de formatos de fecha y hora. |
día del año | dayofyear, doy, dy, yearday (compatibles con EXTRACT) |
día, días | d |
hora, horas | h, hr, hrs |
minuto, minutos | m, min, mins |
segundo, segundos | s, sec, secs |
milisegundo, milisegundos | ms, msec, msecs, msecond, mseconds, millisec, millisecs, millisecon |
microsegundo, microsegundos | microsec, microsecs, microsecond, usecond, useconds, us, usec, usecs |
zona horaria, timezone_hour, timezone_minute | Compatible solo con EXTRACT para marca temporal con zona horaria (TIMESTAMPTZ). |
Variaciones en resultados con segundos, milisegundos y microsegundos
Cuando diferentes funciones de fechas especifican segundos, milisegundos o microsegundos como partes de fecha, se generan diferencias mínimas en los resultados de las consultas:
-
La función EXTRACT devuelve números enteros solo para la parte de fecha especificada e ignora partes de fecha de niveles mayores y menores. Si la parte de fecha especificada es segundos, los milisegundos y los microsegundos no se incluyen en el resultado. Si la parte de fecha especificada es milisegundos, los segundos y los microsegundos no se incluyen. Si la parte de fecha especificada es microsegundos, los segundos y los milisegundos no se incluyen.
-
La función DATE_PART devuelve la parte de segundos de la marca temporal completa, sin importar la parte de fecha especificada, por lo que devuelve un valor decimal o un número entero según se requiera.
Por ejemplo, compare los resultados de las siguientes consultas:
create table seconds(micro timestamp); insert into seconds values('2009-09-21 11:10:03.189717'); select extract(sec from micro) from seconds;
date_part ----------- 3
select date_part(sec, micro) from seconds;
pgdate_part ------------- 3.189717
Notas acerca de CENTURY, EPOCH, DECADE y MIL
- CENTURY o CENTURIES
-
Amazon Redshift interpreta que CENTURY comienza en el año ###1 y termina en el año
###0
:select extract (century from timestamp '2000-12-16 12:21:13');
date_part ----------- 20
select extract (century from timestamp '2001-12-16 12:21:13');
date_part ----------- 21
- EPOCH
-
La implementación de EPOCH en Amazon Redshift está asociada a 1970-01-01 00:00:00.000000, sin importar la zona horaria donde resida el clúster. Podría ser necesario desplazar los resultados de la diferencia en horas según la zona horaria donde se encuentre el clúster.
En el siguiente ejemplo, se muestra lo siguiente:
-
Crea una tabla denominada EVENT_EXAMPLE basada en la tabla EVENT. Este comando CREATE AS usa la función DATE_PART para crear una columna de fecha (denominada PGDATE_PART de manera predeterminada) para almacenar el valor de fecha de inicio de cada evento.
-
Selecciona la columna y el tipo de dato de EVENT_EXAMPLE de PG_TABLE_DEF.
-
Selecciona EVENTNAME, STARTTIME y PGDATE_PART de la tabla EVENT_EXAMPLE para visualizar los diferentes formatos de fecha y hora.
-
Selecciona EVENTNAME y STARTTIME de EVENT EXAMPLE como están. Convierte los valores de fecha de inicio en PGDATE_PART mediante el uso de un intervalo de 1 segundo a una marca temporal sin zona horaria y devuelve los resultados en una columna denominada CONVERTED_TIMESTAMP.
create table event_example as select eventname, starttime, date_part(epoch, starttime) from event; select "column", type from pg_table_def where tablename='event_example';
column | type ---------------+----------------------------- eventname | character varying(200) starttime | timestamp without time zone pgdate_part | double precision (3 rows)
select eventname, starttime, pgdate_part from event_example;
eventname | starttime | pgdate_part ----------------------+---------------------+------------- Mamma Mia! | 2008-01-01 20:00:00 | 1199217600 Spring Awakening | 2008-01-01 15:00:00 | 1199199600 Nas | 2008-01-01 14:30:00 | 1199197800 Hannah Montana | 2008-01-01 19:30:00 | 1199215800 K.D. Lang | 2008-01-01 15:00:00 | 1199199600 Spamalot | 2008-01-02 20:00:00 | 1199304000 Macbeth | 2008-01-02 15:00:00 | 1199286000 The Cherry Orchard | 2008-01-02 14:30:00 | 1199284200 Macbeth | 2008-01-02 19:30:00 | 1199302200 Demi Lovato | 2008-01-02 19:30:00 | 1199302200
select eventname, starttime, timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp from event_example;
eventname | starttime | converted_timestamp ----------------------+---------------------+--------------------- Mamma Mia! | 2008-01-01 20:00:00 | 2008-01-01 20:00:00 Spring Awakening | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Nas | 2008-01-01 14:30:00 | 2008-01-01 14:30:00 Hannah Montana | 2008-01-01 19:30:00 | 2008-01-01 19:30:00 K.D. Lang | 2008-01-01 15:00:00 | 2008-01-01 15:00:00 Spamalot | 2008-01-02 20:00:00 | 2008-01-02 20:00:00 Macbeth | 2008-01-02 15:00:00 | 2008-01-02 15:00:00 The Cherry Orchard | 2008-01-02 14:30:00 | 2008-01-02 14:30:00 Macbeth | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 Demi Lovato | 2008-01-02 19:30:00 | 2008-01-02 19:30:00 ...
-
- DECADE o DECADES
-
Amazon Redshift interpreta DECADE o DECADES DATEPART en función del calendario común. Por ejemplo, debido a que el calendario común comienza a partir del año 1, la primera década (década 1) es de 0001-01-01 a 0009-12-31 y la segunda década (década 2) es de 0010-01-01 a 0019-12-31. Por ejemplo, la década 201 se extiende de 01/01/2001 a 31/12/2009:
select extract(decade from timestamp '1999-02-16 20:38:40');
date_part ----------- 200
select extract(decade from timestamp '2000-02-16 20:38:40');
date_part ----------- 201
select extract(decade from timestamp '2010-02-16 20:38:40');
date_part ----------- 202
- MIL o MILS
-
Amazon Redshift interpreta que MIL comienza el primer día del año #001 y termina el último día del año
#000
:select extract (mil from timestamp '2000-12-16 12:21:13');
date_part ----------- 2
select extract (mil from timestamp '2001-12-16 12:21:13');
date_part ----------- 3