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á NULL
conforme 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 orders
tabela 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 s
Linguagem de código: JavaScript ( javascript )
A consulta faz o seguinte:
- Primeiro, selecione os dados da
orders
tabela. - 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 tests
para 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 date
coluna armazenará os dados da data.
Segundo, insira muitas linhas na tests
tabela 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 tests
tabela:
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 tests
tabela 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 212
linhas.
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 date
coluna da tests
tabela da seguinte forma:
ALTER TABLE tests
ADD INDEX YEAR(date);
A consulta a seguir mostra que a consulta de dados da tests
tabela com base na YEAR()
função da date
coluna 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.