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