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

Como WEEK() funciona no MariaDB


No MariaDB, WEEK() é uma função de data e hora integrada que retorna a semana de uma determinada expressão de data.

Ele aceita dois argumentos; a data da qual você deseja extrair a semana e um argumento de modo opcional para especificar o modo a ser usado no resultado.

Retorna a semana como um número no intervalo 0 para 53 ou 1 para 53 , dependendo do modo que está sendo usado.

Sintaxe


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

Onde date é a expressão de data para obter a semana e mode é um argumento opcional que permite especificar um modo a ser usado.

Modos


O mode opcional O argumento determina se a semana começa no domingo ou na segunda-feira e se o valor de retorno deve estar no intervalo de 0 para 53 ou de 1 para 53 .

O argumento mode pode ser qualquer um dos seguintes:
Modo 1º dia da semana Intervalo A semana 1 é a primeira semana com…
0 Domingo 0-53 um domingo neste ano
1 Segunda-feira 0-53 mais de 3 dias este ano
2 Domingo 1-53 um domingo neste ano
3 Segunda-feira 1-53 mais de 3 dias este ano
(de acordo com a ISO 8601:1988)
4 Domingo 0-53 mais de 3 dias este ano
5 Segunda-feira 0-53 uma segunda-feira neste ano
6 Domingo 1-53 mais de 3 dias este ano
7 Segunda-feira 1-53 uma segunda-feira neste ano

Se o argumento mode for omitido, o valor do default_week_format variável de sistema é usada.

Vamos verificar o valor do meu default_week_format variável do sistema:
SELECT @@default_week_format; 

Resultado:
+-----------------------+| @@default_week_format |+-----------------------+| 0 |+-----------------------+

Agora, quando executo WEEK() sem especificar um modo, ele usará o modo 0 .

Exemplo


Aqui está um exemplo de como chamar WEEK() sem especificar o modo:
SELECT WEEK('2030-01-01'); 

Resultado:
+--------------------+| SEMANA('2030-01-01') |+--------------------+| 0 |+--------------------+

Especifique um modo


Aqui está um exemplo de especificação do modo:
SELECT WEEK('2030-01-01', 1); 

Resultado:
+-----------------------+| SEMANA('2030-01-01', 1) |+-----------------------+| 1 |+-----------------------+

Desta vez, o resultado é 1 em vez de 0 .

Vamos percorrer todos os modos para a mesma data:
SELECT 
    WEEK('2030-01-01', 0),
    WEEK('2030-01-01', 1),
    WEEK('2030-01-01', 2),
    WEEK('2030-01-01', 3),
    WEEK('2030-01-01', 4),
    WEEK('2030-01-01', 5),
    WEEK('2030-01-01', 6),
    WEEK('2030-01-01', 7); 

Resultado (usando saída vertical):
SEMANA('2030-01-01', 0):0SEMANA('2030-01-01', 1):1SEMANA('2030-01-01', 2):52SEMANA('2030-01-01 ', 3):1 SEMANA('2030-01-01', 4):1 SEMANA('2030-01-01', 5):0 SEMANA('2030-01-01', 6):1 SEMANA('2030-01 -01', 7):53

Valores de data e hora


A WEEK() A função também funciona com valores de data e hora:
SELECT WEEK('2030-08-01 10:30:45'); 

Resultado:
+-----------------------------+| SEMANA('2030-08-01 10:30:45') |+-----------------------------+| 30 |+-----------------------------+

Datas numéricas


Também é possível passar datas como um número, desde que faça sentido como uma data.

Exemplo
SELECT WEEK(20301125); 

Resultado:
+----------------+| SEMANA(20301125) |+----------------+| 47 |+----------------+

Ou mesmo o seguinte (que usa um ano de dois dígitos):
SELECT WEEK(301125); 

Resultado:
+--------------+| SEMANA(301125) |+--------------+| 47 |+--------------+

Mas deve fazer sentido como uma data. Veja o que acontece se eu aumentar a parte do dia para um dia inválido:
SELECT WEEK(20301135); 

Resultado:
+----------------+| SEMANA(20301135) |+----------------+| NULL |+----------------+1 linha no conjunto, 1 aviso (0,001 seg)

Ele retornou null com um aviso.

Vejamos o aviso:
SHOW WARNINGS; 

Resultado:
+---------+------+----------------------------- ---------+| Nível | Código | Mensagem |+---------+------+------------------- --------+| Aviso | 1292 | Valor de data e hora incorreto:'20301135' |+---------+------+------------------------ --------------+

Outros delimitadores


Você pode usar outros delimitadores para a data. O MariaDB é bastante tolerante quando se trata de delimitadores de datas. Aqui estão alguns exemplos válidos:
SELECT 
    WEEK('2030/06/25'),
    WEEK('2030,06,25'),
    WEEK('2030:06:25'),
    WEEK('2030;06!25'); 

Resultado (usando saída vertical):
SEMANA('2030/06/25'):25 SEMANA('2030,06,25'):25 SEMANA('2030:06:25'):25 SEMANA('2030;06!25'):25 

Data atual


Podemos passar NOW() como argumento datetime para usar a data atual:
SELECT 
    NOW(),
    WEEK(NOW()); 

Resultado:
+----------+-------------+| AGORA() | SEMANA(AGORA()) |+---------------------+------------+| 2021-05-17 08:36:12 | 20 |+----------+-------------+

Argumentos inválidos


Quando passado um argumento inválido, WEEK() retorna null :
SELECT WEEK('2030-65-78'); 

Resultado:
+--------------------+| SEMANA('2030-65-78') |+--------------------+| NULL |+--------------------+1 linha no conjunto, 1 aviso (0,000 seg)

Vamos mostrar o aviso:
SHOW WARNINGS; 

Resultado:
+---------+------+----------------------------- -----------+| Nível | Código | Mensagem |+---------+------+------------------- ----------+| Aviso | 1292 | Valor de data e hora incorreto:'2030-65-78' |+---------+------+-------------------- --------------------+

Argumento ausente


Chamando WEEK() com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT WEEK(); 

Resultado:
ERRO 1064 (42000):Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta para usar perto de ')' na linha 1

E outro exemplo:
SELECT WEEK('2030-12-10', 1, 2); 

Resultado:
ERRO 1064 (42000):Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à sua versão do servidor MariaDB para a sintaxe correta para usar perto de ' 2)' na linha 1