O SQL nos fornece funções pré-definidas para trabalharmos com informações relacionadas ao tipo DATE, podendo selecionar apenas o dia, mes ou ano de um campo com este tipo.

Visao geral

A manipulação de partes específicas de uma campo DATE é uma tarefa comum para o desenvolvedor. Ele pode utilizar partes de determinada coluna para realizar filtros, cálculos ou outra ação que auxilie na coleta da informação desejada.

Para os exemplo a seguir, considere a estrutura de tabelas abaixo, onde temos uma tabela chamada produto (Tabela 1), responsável por armazenar todos os produtos do estoque do cliente, a tabela categoria_produto (Tabela 2), responsável por armazenar todas as categorias existentes no banco de dados, e a tabela venda_produto (Tabela 3), que relaciona os produtos que foram vendidos.

id nome preco Id_categoria
1 Bola 35.00 1
2 Patinete 120.00 1
3 Carrinho 15.00 1
4 Skate 296.00 1
5 Notebook 3500.00 2
6 Monitor LG 19 450.00 2
7 O Diário de Anne Frank 45.00 3
8 O dia do Curinga 65.00 3
9 O mundo de Sofia 48.00 3
10 Através do Espelho 38.00 3
Tabela 1. Tabela produto
id nome
1 Infantil
2 Informatica
3 Educacional
Tabela 2. Tabela categoria_produto
id id_produto valor data
1 1 35.00 2018-05-15
2 1 35.00 2018-06-15
3 1 35.00 2018-07-15
4 2 120.00 2018-07-15
5 2 120.00 2018-07-14
6 3 15.00 2018-07-15
7 7 45.00 2018-07-15
8 8 65.00 2018-07-15
9 8 65.00 2018-07-16
10 9 48.00 2018-07-16
11 5 3500.00 2018-07-16
12 5 3500.00 2018-07-16
13 6 450.00 2018-07-16
Tabela 3. Tabela venda_produto

Suponha que seja necessário trazer o total de vendas de cada produto vendido no ano de 2018. Para isso podemos utilizar a query abaixo:

SELECT 
    P.nome as PRODUTO,
    COUNT(V.id_produto) as TOTAL_VENDIDO
    FROM
    produto P, venda_produto V
    WHERE P.id = V.id_produto AND
    YEAR(V.data) = 2018
    GROUP BY
  P.id;

No trecho de código acima, nas linhas 2 e 3 selecionamos o nome do produto e o total de ID_PRODUTO, nomeado de TOTAL_VENDIDO.

Na linha 5 informamos que os dados serão consultados nas tabelas produto, nomeada de P, e na tabela venda_produto, nomeada de V.

Nas linhas 6 e 7 é onde acontece o principal para esta query. Na linha 6 é feito o vínculo entre as duas tabelas e, logo em seguida, na linha 7 definimos o filtro da consulta: O ano do campo DATA deve ser igual a 2018.

O resultado da query pode ser visto abaixo na Tabela 4.

PRODUTO TOTAL_VENDIDO
Bola 3
Patinete 2
Carrinho 1
Notebook 2
Monitor LG 19 1
O Diário de Anne Frank 1
O dia do Curinga 2
O mundo de Sofia 1
Tabela 4. Resultado da pesquisa de vendas no ano de 2018

Sintaxe

SELECT
  [ DAY | MONTH | YEAR (tabela1.coluna), ... | * ]
  FROM
[ tabela1 ]

Na pratica

Exemplo 1

Para um novo exemplo, suponha que seja necessário saber exatamente qual os dois meses mais lucrativos do ano. Para isso podemos utilizar a query abaixo:

SELECT 
      MONTH(V.data) as MES,
      SUM(V.valor) as TOTAL_RECEBIDO
    FROM
      venda_produto V
    GROUP BY
      MES
    ORDER BY
      TOTAL_RECEBIDO DESC
    LIMIT 0, 2
  

No trecho de código acima, nas linhas 2 e 3 selecionamos o mês através da função MONTH e em seguida selecionamos a soma dos valores vendidos.

Logo após informamos na linha 5 que a consulta será feita na tabela venda_produto, nomeada de V.

Na linha 7 informamos que os dados serão agrupados por MES e na linha 9 ordenamos a consulta pelo valor TOTAL_RECEBIDO do maior para o menor.

O resultado da query pode ser visto abaixo na Tabela 5

MES TOTAL_RECEBIDO
7 7963.00
5 35.00
Tabela 5. Resultado da pesquisa do mês com mais rendimento no ano.

Exemplo 2

Para este exemplo, suponha que seja necessário trazer na consulta todos os produtos que foram vendidos no dia 15 de julho. Para isso podemos utilizar a query abaixo:

SELECT 
  P.nome as PRODUTO
FROM 
  produto P, venda_produto V
WHERE
  P.id = V.id_produto AND
  DAY(V.data) = 15 AND
  MONTH(V.data) = 7
GROUP BY
  P.id

No trecho de código acima, o trecho principal esta nas linhas 7 e 8, onde definimos que o dia deve ser 15 e o mês deve ser 7 (JULHO)

O resultado da query pode ser visto abaixo na Tabela 6.

PRODUTO
Bola
Patinete
Carrinho
O Diário de Anne Frank
O dia do Curinga
Tabela 6. Resultado da pesquisa dos produtos vendidos dia 15 de julho
Saiba mais Veja a Série SQL nível Jedi: Subqueries