No MariaDB,
YEARWEEK()
é uma função interna de data e hora que retorna o ano e a semana de uma determinada data. Ele aceita dois argumentos; a data da qual você deseja extrair o ano e 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. Além disso, o ano no resultado pode ser diferente do ano no argumento de data para a primeira e a última semana do ano. Sintaxe
A sintaxe fica assim:
YEARWEEK(date), YEARWEEK(date,mode)
O que também pode ser expresso assim:
YEARWEEK(date[,mode])
Onde
date
é a expressão de data para obter o ano e 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 eu executo
YEARWEEK()
sem especificar um modo, ele usará o modo 0
. Exemplo
Aqui está um exemplo de chamada de
YEARWEEK()
sem especificar o modo:SELECT YEARWEEK('2030-01-01');
Resultado:
+------------------------+| ANO SEMANA('2030-01-01') |+------------------------+| 202952 |+------------------------+
Neste caso, o ano e a semana resultantes são do ano anterior.
Especifique um modo
Aqui está um exemplo de especificação do modo:
SELECT YEARWEEK('2030-01-01', 1);
Resultado:
+---------------------------+| YEARWEEK('2030-01-01', 1) |+----------------------------+| 203001 |+---------------------------+
Desta vez, o resultado é diferente.
Vamos percorrer todos os modos para a mesma data:
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Resultado (usando saída vertical):
YEARWEEK('2030-01-01', 0):202952YEARWEEK('2030-01-01', 1):203001YEARWEEK('2030-01-01', 2):202952YEARWEEK('2030-01-01) ', 3):203001YEARWEEK('2030-01-01', 4):203001YEARWEEK('2030-01-01', 5):202953YEARWEEK('2030-01-01', 6):203001YEARWEEK('2030-01) -01', 7):202953
Valores de data e hora
O
YEARWEEK()
A função também funciona com valores de data e hora:SELECT YEARWEEK('2030-08-01 10:30:45');
Resultado:
+---------------------------------+| ANO SEMANA('2030-08-01 10:30:45') |+--------------------------------- +| 203030 |+---------------------------------+
Datas numéricas
Também é possível passar datas como um número, desde que faça sentido como uma data.
Exemplo
SELECT YEARWEEK(20301125);
Resultado:
+--------------------+| ANO SEMANA(20301125) |+--------------------+| 203047 |+--------------------+
Ou mesmo o seguinte (que usa um ano de dois dígitos):
SELECT YEARWEEK(301125);
Resultado:
+------------------+| ANO SEMANA(301125) |+------------------+| 203047 |+------------------+
Mas deve fazer sentido como uma data. Veja o que acontece se eu aumentar a parte do dia para um dia inválido:
SELECT YEARWEEK(20301135);
Resultado:
+--------------------+| ANO SEMANA(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
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Resultado (usando saída vertical):
YEARWEEK('2030/06/25'):203025YEARWEEK('2030,06,25'):203025YEARWEEK('2030:06:25'):203025YEARWEEK('2030;06!25'):203025Data atual
Podemos passarNOW()
como argumento datetime para usar a data atual:
SELECT NOW(), YEARWEEK(NOW());
Resultado:
+---------------------+-----------------+| AGORA() | ANO SEMANA(AGORA()) |+--------------------------------+-----------------+| 2021-05-17 09:08:23 | 202120 |+---------------------+-----------------+Argumentos inválidos
Quando passado um argumento inválido,YEARWEEK()
retornanull
:
SELECT YEARWEEK('2030-65-78');
Resultado:
+------------------------+| ANO 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
ChamandoYEARWEEK()
com o número errado de argumentos, ou sem passar nenhum argumento, resulta em um erro:
SELECT YEARWEEK();
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'YEARWEEK'
E outro exemplo:
SELECT YEARWEEK('2030-12-10', 1, 2);
Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'YEARWEEK'