MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

5 funções para extrair o número da semana de uma data no MariaDB


Abaixo estão 5 funções que permitem retornar o número da semana de uma data no MariaDB. Quatro retornam apenas a semana e um retorna a semana e o ano combinados.

A WEEK() Função


A WEEK() função retorna a semana para uma determinada data.

Exemplo:
SELECT WEEK('2023-07-25');

Resultado:
+--------------------+
| WEEK('2023-07-25') |
+--------------------+
|                 30 |
+--------------------+

A WEEK() A função aceita um segundo argumento opcional para especificar o modo. O resultado real que você obtém dessa função dependerá do modo que está sendo usado. Se o argumento mode for omitido, o valor do default_week_format variável de sistema é usada.

Veja como WEEK() Funciona no MariaDB para saber mais sobre os modos e exemplos de cada um.

O EXTRACT() Função


O EXTRACT () A função permite extrair uma unidade especificada da data. Portanto, você pode usá-lo para extrair a semana (assim como outras unidades) da data.

Exemplo:
SELECT EXTRACT(WEEK FROM '2023-07-25');

Resultado:
+---------------------------------+
| EXTRACT(WEEK FROM '2023-07-25') |
+---------------------------------+
|                              30 |
+---------------------------------+

O DATE_FORMAT() Função


O DATE_FORMAT() A função permite que você formate uma data com base em uma string de formato. A string de formato especifica como a data deve ser formatada.

Você pode, portanto, usar esta função para retornar a semana (assim como qualquer outra unidade) da data. Existem várias opções para retornar o número da semana, dependendo do dia em que a semana começa, etc.

Aqui está um exemplo que retorna a semana de várias formas:
SELECT 
    DATE_FORMAT('2023-01-01', '%U') AS "%U",
    DATE_FORMAT('2023-01-01', '%u') AS "%u",
    DATE_FORMAT('2023-01-01', '%V') AS "%V",
    DATE_FORMAT('2023-01-01', '%v') AS "%v";

Resultado:
+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 01   | 00   | 01   | 52   |
+------+------+------+------+

Aqui está uma descrição de cada um desses especificadores de formato:
Especificador de formato Descrição
%U Número da semana (00-53), quando o primeiro dia da semana é domingo.
%u Número da semana (00-53), quando o primeiro dia da semana é segunda-feira.
%V Número da semana (01-53), quando o primeiro dia da semana é domingo. Usado com %X .
%v Número da semana (01-53), quando o primeiro dia da semana é segunda-feira. Usado com %x .

E aqui está uma descrição de %X e %x conforme indicado na tabela acima:
Especificador de formato Descrição
%X Ano com 4 dígitos quando o primeiro dia da semana é domingo. Usado com %V .
%x Ano com 4 dígitos quando o primeiro dia da semana é segunda-feira. Usado com %v .

Podemos combinar especificadores de formato para retornar o ano e a semana juntos, se necessário:
SELECT 
    DATE_FORMAT('2023-01-01', '%X, %V') AS "%X, %V",
    DATE_FORMAT('2023-01-01', '%x, %v') AS "%x, %v";

Resultado:
+----------+----------+
| %X, %V   | %x, %v   |
+----------+----------+
| 2023, 01 | 2022, 52 |
+----------+----------+

Observe que o número da semana nem sempre refletirá os exemplos acima – depende da data real que está sendo usada.

Vamos adiantar a data um ano:
SELECT 
    DATE_FORMAT('2024-01-01', '%U') AS "%U",
    DATE_FORMAT('2024-01-01', '%u') AS "%u",
    DATE_FORMAT('2024-01-01', '%V') AS "%V",
    DATE_FORMAT('2024-01-01', '%v') AS "%v";

Resultado:
+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 00   | 01   | 53   | 01   |
+------+------+------+------+

Desta vez, obtemos um conjunto diferente de resultados.

Veja o que acontece quando avançamos no ano:
SELECT 
    DATE_FORMAT('2024-12-12', '%U') AS "%U",
    DATE_FORMAT('2024-12-12', '%u') AS "%u",
    DATE_FORMAT('2024-12-12', '%V') AS "%V",
    DATE_FORMAT('2024-12-12', '%v') AS "%v";

Resultado:
+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 49   | 50   | 49   | 50   |
+------+------+------+------+

Como você pode ver, retornar o número da semana nem sempre é tão claro quanto gostaríamos.

Veja Strings de Formato MariaDB para uma lista completa de strings/especificadores de formato que podem ser usados ​​com DATE_FORMAT() .

A YEARWEEK() Função


É possível obter a semana e ano de uma só vez. O YEARWEEK() A função retorna o ano e a semana de uma determinada data.

Exemplo:
SELECT YEARWEEK('2023-01-01');

Resultado:
+------------------------+
| YEARWEEK('2023-01-01') |
+------------------------+
|                 202301 |
+------------------------+

O ano no resultado pode ser diferente do ano no argumento de data para a primeira e a última semana do ano.

Aqui está o que acontece se avançarmos um ano:
SELECT YEARWEEK('2024-01-01');

Resultado:
+------------------------+
| YEARWEEK('2024-01-01') |
+------------------------+
|                 202353 |
+------------------------+

Assim como o WEEK() função, a função YEARWEEK() A função aceita um segundo argumento opcional para especificar o modo. O resultado real que você obtém dessa função dependerá do modo que está sendo usado. Se o argumento mode for omitido, o valor do default_week_format variável de sistema é usada.

Veja como YEARWEEK() Funciona no MariaDB para saber mais sobre os modos e exemplos de cada um.