Ela é equivalente a função date_part.
Vamos descrever 3 exemplos com a função extract.
Caso tenha interesse faça download dos exemplos ou veja no GitHub.
1º Exemplo: vamos extrair partes da data da coluna "data_exame" da tabela "tb_exame". A tabela contém informações da realização de exames em um laboratório.
Solução
extract( parte_da_data from nome_da_coluna )
- parte_da_data: podemos passar qual a parte da data que queremos, por exemplo, day para o dia ou year para o ano, entre outros;
- nome_da_coluna: nome da coluna de uma tabela. Neste caso, vamos escolher a coluna "data_exame" da tabela "tb_exame";
A sentença abaixo apresenta alguns argumentos que podem ser passados na função extract.
SELECT
paciente_id,
data_exame,
/*exibe o dia do exame*/
extract( day from data_exame ) AS dia,
/*exibe o mês do exame*/
extract( month from data_exame ) AS mes,
/*exibe o ano do exame*/
extract(year from data_exame ) AS ano,
/*exibe a hora do exame*/
extract( hour from data_exame ) AS hora,
/*exibe o minuto do exame*/
extract( minute from data_exame ) AS minuto,
/*exibe o segundo do exame*/
extract( second from data_exame ) AS segundo,
/*exibe os dias da semana que são representados por números inteiros de 0 até 6
*0 - domingo, 1 - segunda e assim sucessivamente até 6 - sábado
*/
extract( dow from data_exame ) AS int_semana
FROM tb_exame;
Após a execução da sentença acima, temos o resultado exibido na imagem abaixo:
Segue uma breve descrição, de outros argumentos que podem ser passados na função extract:
- century: século da data. O século para data "2012-11-13 07:14:24" é 21;
- decade: quantas décadas se passara a partir de 1 d.c. A década para data "2012-11-13 07:14:24" é 201. O resultado é a parte inteira da divisão do ano por 10, ou seja, 2012 / 10;
- doy:o dia do ano de (1-365) ou (1-366) bissexto. O dia do ano para data "2012-11-13 07:14:24" é 318;
- isodow: os dias da semana são representados por números inteiros de 1 até 7, ou seja, 1 para segunda, 2 para terça e assim sucessivamente até 7 para domingo. O dia da semana para a data "2012-11-13 07:14:24" é 2;
- quarter: divide o ano em quatro partes. Indica se a data está no 1º, 2º, 3º ou 4º trimestre. A data "2012-11-13 07:14:24" está no quarto trimestre, logo o argumento quarter retorna 4;
Solução: precisamos agrupar as datas por ano, logo vamos passar o "year" para a função "extract".
SELECT
extract( year from data_exame ) AS ano,
/*A função COUNT faz a contagem*/
COUNT(*) AS quantidade
FROM tb_exame
/*Agrupa por ano*/
GROUP BY ano
/*Ordena por ano em ordem crescente*/
ORDER BY ano;
Após a execução da sentença acima, podemos visualizar o resultado na imagem abaixo:
3º Exemplo: Verifique quais são os funcionários aniversariantes do dia. Para fazer esta verificação vamos utilizar a tabela "tb_funcionarios", veja a imagem abaixo.
tb_funcionario |
SELECT CURRENT_DATE
Agora que já sabemos como retornar uma data do dia atual, vamos fazer a consulta para exibir quais são os aniversariantes do dia.
SELECT
func_codigo,
func_nome,
func_data_nascimento
FROM tb_funcionarios
WHERE
/*Verifica se o dia do aniversário é igual ao dia atual*/
EXTRACT (DAY FROM func_data_nascimento) = EXTRACT (DAY FROM CURRENT_DATE)
/*
*Operador lógico AND (E) seleciona um registro, somente se, as duas condições forem satisfeitas, ou seja se o dia e o mês da data de nascimento forem iguais ao dia e o mês da data atual.
*/
AND
/*Verifica se o mês do aniversário é igual ao mês atual*/
EXTRACT (MONTH FROM func_data_nascimento) = EXTRACT (MONTH FROM CURRENT_DATE);
Após a execução da consulta acima, teremos o resultado exibido na imagem a seguir.
Deixe o seu comentário. Suas sugestões ou críticas serão bem-vindas.
Bom dia a todos gostei muito das dicas que foram passadas. Obrigado
ResponderExcluiras dicas me foram muito uteis, agradeço muito
ResponderExcluir