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'):25Data atual
Podemos passarNOW()
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()
retornanull
:
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
ChamandoWEEK()
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