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

4 maneiras de separar horas, minutos e segundos de um valor de tempo no MariaDB


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' |
+---------+------+---------------------------------------------+