MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como YEARWEEK() funciona no MariaDB


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'