No MariaDB,
WEEKOFYEAR()
é uma função de data e hora integrada que retorna a semana do calendário de uma determinada data como um número no intervalo de 1
para 53
. É o equivalente a usar o
WEEK()
função no modo 3 e, portanto, seu resultado está de acordo com a ISO 8601:1988. Ele aceita um argumento; a data da qual você deseja extrair a semana.
Sintaxe
A sintaxe fica assim:
WEEKOFYEAR(date)
Onde
date
é a expressão de data da qual obter a semana do calendário. Exemplo
Aqui está um exemplo:
SELECT WEEKOFYEAR('2030-01-01');
Resultado:
+--------------------------+| WEEKOFYEAR('2030-01-01') |+--------------------------+| 1 |+--------------------------+
É o equivalente a fazer o seguinte:
SELECT WEEK('2030-01-01', 3);
Resultado:
+-----------------------+| SEMANA('2030-01-01', 3) |+-----------------------+| 1 |+-----------------------+
Valores de data e hora
O
WEEKOFYEAR()
A função também funciona com valores de data e hora:SELECT WEEKOFYEAR('2030-08-01 10:30:45');
Resultado:
+-----------------------------------+| WEEKOFYEAR('2030-08-01 10:30:45') |+--------------------------------- --+| 31 |+-----------------------------------+
Datas numéricas
Também é possível passar datas como um número, desde que faça sentido como uma data.
Exemplo
SELECT WEEKOFYEAR(20301125);
Resultado:
+----------------------+| SEMANAANO(20301125) |+-----------------------+| 48 |+----------------------+
Ou mesmo o seguinte (que usa um ano de dois dígitos):
SELECT WEEKOFYEAR(301125);
Resultado:
+--------------------+| SEMANAANO(301125) |+--------------------+| 48 |+--------------------+
Mas deve fazer sentido como uma data. Veja o que acontece se eu aumentar a parte do dia para um dia inválido:
SELECT WEEKOFYEAR(20301135);
Resultado:
+----------------------+| SEMANAANO(20301135) |+----------------------+| NULL |+----------------------+1 linha no conjunto, 1 aviso (0,000 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
WEEKOFYEAR('2030/06/25'),
WEEKOFYEAR('2030,06,25'),
WEEKOFYEAR('2030:06:25'),
WEEKOFYEAR('2030;06!25');
Resultado (usando saída vertical):
WEEKOFYEAR('2030/06/25'):26WEEKOFYEAR('2030,06,25'):26WEEKOFYEAR('2030:06:25'):26WEEKOFYEAR('2030;06!25'):26Data atual
Podemos passarNOW()
como argumento datetime para usar a data atual:
SELECT NOW(), WEEKOFYEAR(NOW());
Resultado:
+---------------------+-------------------+| AGORA() | WEEKOFYEAR(AGORA()) |+---------------------+-------------------+ | 2021-05-17 09:42:13 | 20 |+---------------------+-------------------+Argumentos inválidos
Quando passado um argumento inválido,WEEKOFYEAR()
retornanull
:
SELECT WEEKOFYEAR('2030-65-78');
Resultado:
+--------------------------+| WEEKOFYEAR('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
ChamandoWEEKOFYEAR()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT WEEKOFYEAR();
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'WEEKOFYEAR'
E outro exemplo:
SELECT WEEKOFYEAR('2030-12-10', 1);
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'WEEKOFYEAR'