Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exemplos de WEEK() – MySQL


No MySQL, você pode usar o WEEK() função para obter o número da semana para uma determinada data. Por “número da semana” quero dizer a semana do ano.

Para usar a função, basta fornecer a data como argumento e o número da semana será retornado.

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


A sintaxe fica assim:
WEEK(date[,mode])

Onde:
  • date é a data da qual você deseja que o número da semana seja retornado.
  • 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.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT WEEK('2021-01-25') As 'Week Number';

Resultado:
+-------------+
| Week Number |
+-------------+
|           4 |
+-------------+

Aqui está um exemplo com uma data próxima ao final do ano.
SELECT WEEK('2021-12-25') As 'Week Number';

Resultado:
+-------------+
| Week Number |
+-------------+
|          51 |
+-------------+

Exemplo 2 – Especificar um modo


Se você não especificar um segundo argumento, o WEEK() função usa o modo conforme especificado pelo default_week_format variável do sistema. O valor padrão desta variável é 0 .

No entanto, você também tem a opção de fornecer um segundo argumento para especificar qual modo usar. Exemplo:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';

Resultado:
+--------+
| Mode 7 |
+--------+
|     41 |
+--------+

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

Para valores de modo em que a semana 1 é a primeira semana “com 4 ou mais dias este ano”, as semanas são numeradas de acordo com a ISO 8601:1988:
  • Se a semana que contém 1º de janeiro tiver 4 ou mais dias no novo ano, será a semana 1.
  • Caso contrário, é a última semana do ano anterior e a próxima semana é a semana 1.

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 bastante diferentes dependendo da data exata e do modo que está sendo usado.

Data 1

SET @date = '2019-01-05';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      0 |      1 |     52 |      1 |      1 |      0 |      1 |     53 |
+--------+--------+--------+--------+--------+--------+--------+--------+

Data 2

SET @date = '2019-01-06';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      1 |      1 |      1 |      1 |      2 |      0 |      2 |     53 |
+--------+--------+--------+--------+--------+--------+--------+--------+

Data 3

SET @date = '2019-01-07';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultado:
+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      1 |      2 |      1 |      2 |      2 |      1 |      2 |      1 |
+--------+--------+--------+--------+--------+--------+--------+--------+