No MySQL, o
YEARWEEK()
A função retorna o ano e a semana de uma determinada data. Você fornece a data como um argumento e a função retornará o resultado de acordo. Você também tem a opção de especificar se deseja iniciar a semana no domingo ou na segunda-feira e se a semana deve estar no intervalo de 0 a 53 ou 1 a 53.
Sintaxe
Você pode usar um dos dois formulários a seguir:
YEARWEEK(date) YEARWEEK(date,mode)
Onde:
date
é a data da qual você deseja que o ano e o número da semana sejam retornados.mode
é um número que especifica se a semana deve começar no domingo ou na segunda-feira e se a semana deve estar no intervalo de 0 a 53 ou de 1 a 53. Consulte a tabela abaixo para obter os valores de modo possíveis.
Se nenhum modo for especificado, o modo será
0
. Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT YEARWEEK('2021-01-25') As 'Result';
Resultado:
+--------+ | Result | +--------+ | 202104 | +--------+
Aqui está um exemplo com uma data diferente.
SELECT YEARWEEK('1999-12-25') As 'Result';
Resultado:
+--------+ | Result | +--------+ | 199951 | +--------+
Exemplo 2 – Especificar um modo
Se você não especificar um segundo argumento, o
YEARWEEK()
função usa 0
como o modo. No entanto, você também tem a opção de fornecer um segundo argumento para especificar qual modo usar. Exemplo:
SELECT YEARWEEK('2019-11-23', 7) AS 'Mode 7';
Resultado:
+--------+ | Mode 7 | +--------+ | 201946 | +--------+
Os valores de modo possíveis são os seguintes.
Modo | Primeiro dia da semana | Intervalo | A semana 1 é a primeira semana… |
---|---|---|---|
0 | Domingo | 0-53 | com um domingo neste ano |
1 | Segunda-feira | 0-53 | com 4 ou mais dias este ano |
2 | Domingo | 1-53 | com um domingo neste ano |
3 | Segunda-feira | 1-53 | com 4 ou mais dias este ano |
4 | Domingo | 0-53 | com 4 ou mais dias este ano |
5 | Segunda-feira | 0-53 | com uma segunda-feira neste ano |
6 | Domingo | 1-53 | com 4 ou mais dias este ano |
7 | Segunda-feira | 1-53 | com uma segunda-feira neste ano |
Estes são os mesmos valores que podem ser usados com o
WEEK()
função. Uma diferença entre essas duas funções é que o
WEEK()
função deriva seu modo padrão do default_week_format
variável do sistema (o valor padrão desta variável é 0
). YEARWEEK()
por outro lado, ignora esta configuração e usa 0
como seu valor padrão (independentemente do default_week_format
contexto). Exemplo 3 – Comparação de Modos
Aqui está uma rápida comparação de como você pode obter resultados diferentes dependendo do modo que está sendo usado.
Os três exemplos a seguir usam o mesmo código, mas com três datas diferentes. Essas datas são consecutivas – ocorrem nos dias 5, 6 e 7 de janeiro. Como você pode ver, os resultados podem ser bem diferentes dependendo da data exata e do modo que está sendo usado.
Data 1
SET @date = '2019-01-05'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201852 | 201901 | 201852 | 201901 | 201901 | 201853 | 201901 | 201853 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 2
SET @date = '2019-01-06'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201901 | 201901 | 201901 | 201901 | 201902 | 201853 | 201902 | 201853 | +--------+--------+--------+--------+--------+--------+--------+--------+
Data 3
SET @date = '2019-01-07'; SELECT YEARWEEK(@date, 0) AS 'Mode 0', YEARWEEK(@date, 1) AS 'Mode 1', YEARWEEK(@date, 2) AS 'Mode 2', YEARWEEK(@date, 3) AS 'Mode 3', YEARWEEK(@date, 4) AS 'Mode 4', YEARWEEK(@date, 5) AS 'Mode 5', YEARWEEK(@date, 6) AS 'Mode 6', YEARWEEK(@date, 7) AS 'Mode 7';
Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 201901 | 201902 | 201901 | 201902 | 201902 | 201901 | 201902 | 201901 | +--------+--------+--------+--------+--------+--------+--------+--------+