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'):203025 Data atual
Podemos passar NOW() 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() retorna null :
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
Chamando YEARWEEK() 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'