Função EXTRACT
A função EXTRACT retorna a parte da data ou hora de um valor de TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND. Os exemplos incluem um dia, mês, ano, hora, minuto, segundo, milissegundo ou microssegundo de um timestamp.
Sintaxe
EXTRACT(datepart FROM source)
Argumentos
- datepart
-
O subcampo de uma data ou hora que será extraído, como dia, mês, ano, hora, minuto, segundo, milissegundo ou microssegundo. Para os possíveis valores, consulte Partes da data para funções de data ou de timestamp.
- source
-
Uma coluna ou expressão que é avaliada como um tipo de dado TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND.
Tipo de retorno
INTEGER se o valor de source for avaliado como TIMESTAMP, TIME, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND.
DOUBLE PRECISION se o valor de source for avaliado como TIMESTAMPTZ.
Exemplos com TIMESTAMP
O exemplo a seguir determina os números da semana para vendas em que o preço pago foi de $10.000 ou mais. Este exemplo usa os dados de TICKIT. Para ter mais informações, consulte Banco de dados de exemplo.
select salesid, extract(week from saletime) as weeknum from sales where pricepaid > 9999 order by 2; salesid | weeknum --------+--------- 159073 | 6 160318 | 8 161723 | 26
O exemplo a seguir retorna o valor de minutos de um valor de timestamp literal.
select extract(minute from timestamp '2009-09-09 12:08:43'); date_part ----------- 8
O exemplo a seguir retorna o número de milissegundos de um valor de timestamp literal.
select extract(ms from timestamp '2009-09-09 12:08:43.101'); date_part ----------- 101
Exemplos com TIMESTAMPTZ
O exemplo a seguir retorna o ano de um valor de timestamp literal.
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST'); date_part ----------- 1997
Exemplos com TIME
O TIME_TEST da tabela a seguir tem uma coluna TIME_VAL (tipo TIME) com três valores inseridos.
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
O exemplo a seguir extrai os minutos de cada time_val.
select extract(minute from time_val) as minutes from time_test; minutes ----------- 0 0 58
O exemplo a seguir extrai as horas de cada time_val.
select extract(hour from time_val) as hours from time_test; hours ----------- 20 0 0
O exemplo a seguir extrai milissegundos de um valor literal.
select extract(ms from time '18:25:33.123456'); date_part ----------- 123
Exemplos com TIMETZ
O TIMETZ_TEST da tabela de exemplo a seguir tem uma coluna TIMETZ_VAL (tipo TIMETZ) com três valores inseridos.
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
O exemplo a seguir extrai as horas de cada timetz_val.
select extract(hour from timetz_val) as hours from time_test; hours ----------- 4 0 5
O exemplo a seguir extrai milissegundos de um valor literal. Literais não são convertidos para UTC antes da extração ser processada.
select extract(ms from timetz '18:25:33.123456 EST'); date_part ----------- 123
O exemplo a seguir retorna a diferença de horas de um fuso horário em relação ao UTC de um valor de timetz literal.
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT'); date_part ----------- -7
Exemplos com INTERVAL YEAR TO MONTH e INTERVAL DAY TO SECOND
O exemplo a seguir extrai a parte do dia de 1
de INTERVAL DAY TO SECOND que define 36 horas, que é 1 dia e 12 horas.
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
date_part ------------------ 1
O exemplo a seguir extrai a parte do mês de 3
de YEAR TO MONTH que define 15 meses, ou seja, 1 ano e 3 meses.
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
date_part ------------------ 3
O exemplo a seguir extrai a parte do mês de 6
de 30 meses, que é 2 anos e 6 meses.
select EXTRACT('month' from INTERVAL '30' MONTH)
date_part ------------------ 6
O exemplo a seguir extrai a parte da hora de 2
de 50 horas, que é 2 dias 2 horas.
select EXTRACT('hours' from INTERVAL '50' HOUR)
date_part ------------------ 2
O exemplo a seguir extrai a parte dos minutos de 11
de 1 hora, 11 minutos e 11.123 segundos.
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
date_part ------------------ 11
O exemplo a seguir extrai a parte dos segundos de 1.11
de 1 dia, 1 hora, 1 minuto e 1.11 segundos.
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
date_part ------------------ 1.11
O exemplo a seguir extrai o número total de horas em um INTERVAL. Cada parte é extraída e adicionada a um total.
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
?column? ------------------ 50
O exemplo a seguir extrai o número total de horas em um INTERVAL. Cada parte é extraída e adicionada a um 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