O MariaDB inclui várias unidades de data e hora que você pode usar ao trabalhar com valores de data e hora. Por exemplo,
MONTH
é uma unidade e HOUR
é outra unidade. Algumas unidades são unidades compostas. Unidades compostas são quando duas unidades são combinadas em uma. A convenção de nomenclatura é que cada nome de unidade é separado por um sublinhado. Por exemplo,
MINUTE_SECOND
é para minutos e segundos. Abaixo estão alguns exemplos que demonstram como as unidades compostas funcionam no MariaDB.
Lista de unidades compostas
Primeiro, aqui está uma lista das unidades compostas disponíveis no MariaDB:
Unidade | Descrição |
---|---|
SECOND_MICROSECOND | Segundos.Microssegundos |
MINUTE_MICROSECOND | Minutos.Segundos.Microsegundos |
MINUTE_SECOND | Minutos.Segundos |
HOUR_MICROSECOND | Horas.Minutos.Segundos.Microssegundos |
HOUR_SECOND | Horas.Minutos.Segundos |
HOUR_MINUTE | Horas.Minutos |
DAY_MICROSECOND | Dias Horas.Minutos.Segundos.Microssegundos |
DAY_SECOND | Dias Horas.Minutos.Segundos |
DAY_MINUTE | Dias Horas.Minutos |
DAY_HOUR | Dias Horas |
YEAR_MONTH | Anos-Meses |
Basta olhar para os seus nomes para dar uma boa pista sobre o que eles fazem.
Unidades compostas (como qualquer unidade de data/hora) podem ser usadas ao extrair partes de um valor de data/hora e também ao fazer coisas como adicionar e subtrair um intervalo de tempo a um valor de data/hora.
Estes podem ser usados com o
+
e -
operadores ao realizar aritmética em datas, com funções como ADDDATE()
, SUBDATE()
, DATE_ADD()
, DATE_SUB()
, EXTRACT()
, TIMESTAMPADD()
e TIMESTAMPDIFF()
. Eles também podem ser usados no
ON SCHEDULE
cláusula do CREATE_EVENT()
e ALTER_EVENT()
funções. Exemplo - Extraindo Unidades Compostas
As unidades de data e hora podem ser usadas com várias funções diferentes e em vários outros contextos. Uma das funções que aceitam essas unidades é a
EXTRACT()
função. Esta função retorna uma unidade de data/hora especificada de um determinado valor de data ou data/hora. Aqui está um exemplo de como usar uma unidade composta para extrair o ano e o mês de uma data:
SELECT EXTRACT(YEAR_MONTH FROM '2030-12-25');
Resultado:
+---------------------------------------+ | EXTRACT(YEAR_MONTH FROM '2030-12-25') | +---------------------------------------+ | 203012 | +---------------------------------------+
Podemos ver que o ano e o mês são retornados como um valor.
Exemplo - Adicionando/Subtraindo Unidades Compostas
Unidades compostas também podem ser usadas para adicionar e subtrair intervalos de data e hora.
Exemplo:
SELECT '2030-12-25' + INTERVAL '2:08' DAY_HOUR;
Resultado:
+-----------------------------------------+ | '2030-12-25' + INTERVAL '2:08' DAY_HOUR | +-----------------------------------------+ | 2030-12-27 08:00:00 | +-----------------------------------------+
Neste caso, há duas partes a serem observadas em relação à unidade composta.
Como no exemplo anterior, usamos uma unidade composta (neste caso
DAY_HOUR
). Com relação ao intervalo real a ser adicionado, usamos dois pontos para separar cada lado da unidade composta. Neste caso, especificamos
'2:08'
, que adicionou 2 dias e 8 horas ao valor da data. A data original não tem uma parte de hora e, portanto, supõe-se que a hora inicial seja 00:00:00
. MariaDB é razoavelmente tolerante com o rigor do formato. Podemos obter o mesmo efeito usando diferentes separadores e também omitindo o zero à esquerda.
Aqui está outro exemplo que usa o
DATE_ADD()
função com vários intervalos de tempo:SELECT DATE_ADD('2030-12-25', INTERVAL '2!8' DAY_HOUR);
Resultado:
+-------------------------------------------------+ | DATE_ADD('2030-12-25', INTERVAL '2!8' DAY_HOUR) | +-------------------------------------------------+ | 2030-12-27 08:00:00 | +-------------------------------------------------+
Aqui estão mais alguns exemplos de várias unidades compostas:
SELECT
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:2' YEAR_MONTH) AS "YEAR_MONTH",
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:25:35' HOUR_SECOND) AS "HOUR_SECOND",
DATE_ADD('2021-05-01 10:00:00', INTERVAL '1:30' DAY_MINUTE) AS "DAY_MINUTE";
Resultado:
+---------------------+---------------------+---------------------+ | YEAR_MONTH | HOUR_SECOND | DAY_MINUTE | +---------------------+---------------------+---------------------+ | 2022-07-01 10:00:00 | 2021-05-01 11:25:35 | 2021-05-01 11:30:00 | +---------------------+---------------------+---------------------+