Função MySQL ANO()

Resumo : neste tutorial, você aprenderá como usar a YEAR()função MySQL para obter o ano de um valor de data.

Introdução à função MySQL YEAR()

A YEAR()função retorna um ano a partir de um valor de data . Aqui está a sintaxe básica da YEAR()função:

YEAR(date);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • date: este é o valor de data ou data e hora do qual você deseja obter o ano.

A YEAR()função retorna um número inteiro que representa a parte do ano da data fornecida. Tem uma gama de 1000 e 9999.

Se a data for zero, a YEAR()função retornará 0. Se a data for NULL, a YEAR()função retornará NULL.

Exemplos de funções MySQL YEAR()

Vejamos alguns exemplos de uso da YEAR()função.

1) Exemplos simples de funções YEAR()

O exemplo a seguir usa a função YEAR() para extrair o ano de January 1st 2017:

SELECT YEAR('2017-01-01');Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------------------+
| YEAR('2017-01-01') |
+--------------------+
|               2017 |
+--------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para obter o ano atual, você usa a função NOW() para obter a data e hora atuais e passá-las para a função YEAR() da seguinte forma:

SELECT YEAR(NOW());

Se a data for NULL, a YEAR()função retornará NULLconforme mostrado no exemplo a seguir:

SELECT YEAR(NULL);Linguagem de código:  PHP  ( php )

Saída:

+------------+
| YEAR(NULL) |
+------------+
|       NULL |
+------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Conforme mencionado anteriormente, o valor YEAR()de uma data zero é zero:

SELECT YEAR('0000-00-00');Linguagem de código:  JavaScript  ( javascript )

Saída:

+--------------------+
| YEAR('0000-00-00') |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.00 sec)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Usando a função YEAR() com dados da tabela

Usaremos a orderstabela do banco de dados de exemplo :

A consulta a seguir usa a YEAR()função para recuperar o número de pedidos enviados por ano

SELECT 
  YEAR(shippeddate) year, 
  COUNT(ordernumber) shippedOrderQty 
FROM 
  orders 
WHERE 
  shippeddate IS NOT NULL 
GROUP BY 
  YEAR(shippeddate) 
ORDER BY 
  YEAR(shippeddate);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------+-----------------+
| year | shippedOrderQty |
+------+-----------------+
| 2003 |             110 |
| 2004 |             147 |
| 2005 |              55 |
+------+-----------------+
3 rows in set (0.00 sLinguagem de código:  JavaScript  ( javascript )

A consulta faz o seguinte:

  • Primeiro, selecione os dados da orderstabela.
  • Em segundo lugar, filtre os pedidos que não foram enviados.
  • Terceiro, agrupe as linhas restantes pelo ano em que foram enviadas e conte o número de pedidos de cada ano.
  • Por fim, classifique o resultado definido por ano em ordem crescente

Ele fornece informações úteis sobre a tendência das remessas de pedidos ao longo dos anos.

Função MySQL YEAR e índices

Quando você usa a YEAR()função em uma consulta, o MySQL não pode usar um índice . Isso pode levar a uma diminuição na velocidade de recuperação de dados. Tudo bem se a tabela tiver algumas linhas.

Mas será um problema quando o número de linhas na tabela aumentar. Para corrigir isso, você precisa usar um índice funcional na coluna de data para usar a YEAR()função. Considere o seguinte exemplo.

Primeiro, crie uma nova tabela nomeada  testspara fins de demonstração:

CREATE TABLE tests(
    id INT AUTO_INCREMENT PRIMARY KEY,
    date DATE NOT NULL
); Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A datecoluna armazenará os dados da data.

Segundo, insira muitas linhas na teststabela usando um CTE recursivo que gera uma série de datas:

INSERT INTO tests(date)
WITH RECURSIVE data(date) AS
(
  SELECT '2019-06-03'
  UNION ALL
  SELECT date + INTERVAL 1 DAY FROM data
  WHERE date + INTERVAL 1 DAY <= '2020-31-12'
)
SELECT date FROM data;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, obtenha o número de linhas da teststabela:

SELECT 
    COUNT(*)
FROM
    tests; Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----------+
| COUNT(*) |
+----------+
|      578 |
+----------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

A teststabela possui 578 linhas.

Por fim, recupere todas as linhas cujas datas são em 2019:

SELECT 
  * 
FROM 
  tests 
WHERE 
  YEAR(date) = 2019;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Ele retornou 212linhas.

A declaração a seguir explica como o MySQL recupera dados:

EXPLAIN SELECT * 
FROM tests WHERE YEAR(date) = 2019;

Saída:

+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | tests | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  578 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.01 sec)Linguagem de código:  PHP  ( php )

A consulta não usa um índice.

Para melhorar o desempenho, você pode criar um índice funcional na datecoluna da teststabela da seguinte forma:

ALTER TABLE tests
ADD INDEX YEAR(date);

A consulta a seguir mostra que a consulta de dados da teststabela com base na YEAR()função da datecoluna usará o índice:

EXPLAIN SELECT * 
FROM tests WHERE YEAR(date) = 2019;

Saída:

+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------+
| id | select_type | table | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                    |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------+
|  1 | SIMPLE      | tests | NULL       | index | NULL          | YEAR | 3       | NULL |  578 |   100.00 | Using where; Using index |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------+
1 row in set, 1 warning (0.01 sec)Linguagem de código:  PHP  ( php )

Resumo

  • Use a YEAR()função para extrair o ano de um valor de data.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *