O MariaDB tem várias funções que permitem extrair várias partes de data e hora de valores de data/hora. Você pode usá-los para separar cada componente de data/hora em sua própria coluna, se necessário.
Abaixo estão quatro maneiras de extrair as horas, minutos e segundos de um valor de tempo no MariaDB. Como bônus, também incluiremos microssegundos.
A HOUR()
, MINUTE()
, SECOND()
e MICROSECOND()
Funções
A
HOUR()
, MINUTE()
, e SECOND()
as funções extraem as horas, minutos e segundos de um valor de data ou data e hora, respectivamente. E se estiver trabalhando com maior precisão, você pode usar o
MICROSECOND()
função para retornar a parte de microssegundos. Aqui está um exemplo de como usar essas funções para retornar cada componente de tempo em sua própria coluna:
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
os valores podem estar no intervalo '-838:59:59.999999'
para '838:59:59.999999'
. TIME
os valores também podem ser negativos. Nesses casos, os valores de retorno ainda são positivos. Aqui está um valor de tempo negativo:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
O EXTRACT()
Função
O
EXTRACT()
A função permite extrair uma unidade especificada do valor de data/hora. Portanto, você pode usá-lo para extrair as horas, minutos, segundos e microssegundos do valor de tempo. Exemplo:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
O TIME_FORMAT()
Função
O
TIME_FORMAT()
A função permite que você formate um valor de tempo com base em uma string de formato. A string de formato especifica como a hora deve ser formatada. Você pode, portanto, usar esta função para retornar as várias partes do tempo separadamente.
Exemplo:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Também é possível retornar todos os componentes de tempo separadamente, mas na mesma coluna.
Aqui está um exemplo do que quero dizer:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Resultado:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
O
TIME_FORMAT()
A função aceita um subconjunto das strings de formato que podem ser usadas com o DATE_FORMAT()
função. Existem vários especificadores de formato possíveis para a parte da hora. O especificador de formato usado acima retorna a hora com dois dígitos entre
00
e 23
. Veja Strings de Formato MariaDB para uma lista completa de strings/especificadores de formato que podem ser usados com DATE_FORMAT()
. O TIME_FORMAT()
A função só aceita especificadores de formato para horas, minutos e segundos/sub segundos. Qualquer outro especificador de formato resulta em null
ou 0
sendo devolvido. O DATE_FORMAT()
Função
O
DATE_FORMAT()
A função permite que você formate um valor de data ou data e hora com base em uma string de formato. A string de formato especifica como a data/hora deve ser formatada. Podemos, portanto, usar os mesmos especificadores de formato que usamos com o
TIME_FORMAT()
função no exemplo anterior. No entanto, DATE_FORMAT()
não aceita um TIME
valor, então precisaremos passar um DATETIME
valor. SELECT
DATE_FORMAT('2023-01-01 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Passando apenas um
TIME
value não funciona com esta função:SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Resultado:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Vejamos o aviso:
SHOW WARNINGS;
Resultado:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+