Función EXTRACT
La función EXTRACT devuelve una parte de fecha u hora de un valor TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND. Algunos ejemplos son día, mes, año, hora, minuto, segundo, milisegundo o microsegundo de una marca de tiempo.
Sintaxis
EXTRACT(datepart FROM source)
Argumentos
- datepart
-
El subcampo de una fecha u hora que se va a extraer, como día, mes, año, hora, minuto, segundo, milisegundo o microsegundo. Para obtener los valores posibles, consulte Partes de fecha para funciones de fecha o marca temporal.
- origen
-
Una columna o una expresión que se evalúa como un tipo de datos de TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND.
Tipo de retorno
INTEGER si el valor de origen se evalúa como tipo de datos TIMESTAMP, TIME, TIMETZ, INTERVAL YEAR TO MONTH o INTERVAL DAY TO SECOND.
DOUBLE PRECISION si el valor de origen se evalúa como el tipo de datos TIMESTAMPTZ.
Ejemplos con TIMESTAMP
En el siguiente ejemplo, se determinan los números de las semanas para las ventas en las que el precio pagado fue 10 000 USD o más. En este ejemplo, se utilizan los datos de TICKIT. Para obtener más información, consulte Base de datos de muestra.
select salesid, extract(week from saletime) as weeknum from sales where pricepaid > 9999 order by 2; salesid | weeknum --------+--------- 159073 | 6 160318 | 8 161723 | 26
En el siguiente ejemplo, se devuelve el valor de minutos de un valor de marca temporal literal.
select extract(minute from timestamp '2009-09-09 12:08:43'); date_part ----------- 8
En el siguiente ejemplo, se devuelve el valor de milisegundos de un valor timestamp literal.
select extract(ms from timestamp '2009-09-09 12:08:43.101'); date_part ----------- 101
Ejemplos con TIMESTAMPTZ
En el siguiente ejemplo, se devuelve el valor de año de un valor timestamptz literal.
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST'); date_part ----------- 1997
Ejemplos con TIME
La siguiente tabla de ejemplo, TIME_TEST, tiene una columna TIME_VAL (tipo TIME) con tres valores insertados.
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
En el siguiente ejemplo, se extraen los minutos de cada time_val.
select extract(minute from time_val) as minutes from time_test; minutes ----------- 0 0 58
En el siguiente ejemplo, se extraen las horas de cada time_val.
select extract(hour from time_val) as hours from time_test; hours ----------- 20 0 0
En el siguiente ejemplo, se extraen los milisegundos de un valor literal.
select extract(ms from time '18:25:33.123456'); date_part ----------- 123
Ejemplos con TIMETZ
La siguiente tabla de ejemplo, TIMETZ_TEST, tiene una columna TIMETZ_VAL (tipo TIMETZ) con tres valores insertados.
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
En el siguiente ejemplo, se extraen las horas de cada timetz_val.
select extract(hour from timetz_val) as hours from time_test; hours ----------- 4 0 5
En el siguiente ejemplo, se extraen los milisegundos de un valor literal. Los literales no se convierten a UTC antes de que se procese la extracción.
select extract(ms from timetz '18:25:33.123456 EST'); date_part ----------- 123
En el siguiente ejemplo, se devuelve la hora de desfase horario respecto a UTC a partir de un valor timetz literal.
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT'); date_part ----------- -7
Ejemplos con INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND
En el siguiente ejemplo, se extrae la parte del día de 1
del INTERVAL DAY TO SECOND que define 36 horas, es decir, 1 día y 12 horas.
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
date_part ------------------ 1
En el siguiente ejemplo, se extrae la parte del mes de 3
del YEAR TO MONTH que define 15 meses, es decir, 1 año y 3 meses.
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
date_part ------------------ 3
En el siguiente ejemplo, se extrae la parte del mes de 6
de 30 meses que es 2 años y 6 meses.
select EXTRACT('month' from INTERVAL '30' MONTH)
date_part ------------------ 6
En el siguiente ejemplo, se extrae la parte de la hora de 2
de 50 horas que es 2 días y 2 horas.
select EXTRACT('hours' from INTERVAL '50' HOUR)
date_part ------------------ 2
En el siguiente ejemplo, se extrae la parte de minutos de 11
de 1 hora, 11 minutos y 11 123 segundos.
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
date_part ------------------ 11
En el siguiente ejemplo, se extrae la parte de segundos de 1.11
de 1 día, 1 hora, 1 minuto y 1,11 segundos.
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
date_part ------------------ 1.11
En el siguiente ejemplo, se extrae el número total de horas de un INTERVAL. Cada parte se extrae y se agrega a un total.
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
?column? ------------------ 50
En el siguiente ejemplo, se extrae el número total de segundos de un INTERVALO. Cada parte se extrae y se agrega a un total.
select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 + EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
?column? ------------------ 90061.11