Resumo : neste tutorial, você aprenderá sobre o TIME
tipo de dados MySQL e como usar funções temporais para manipular dados de tempo de maneira eficaz.
Introdução ao tipo de dados MySQL TIME
O MySQL usa o 'HH:MM:SS'
formato para consultar e exibir um valor de tempo que representa uma hora do dia, que está dentro de 24 horas.
Para representar um intervalo de tempo entre dois eventos, o MySQL usa o 'HHH:MM:SS'
formato maior que 24 horas.
Para definir uma TIME
coluna, você usa a seguinte sintaxe:
column_name TIME;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Por exemplo, o trecho a seguir define uma coluna nomeada start_at
com TIME
tipo de dados.
start_at TIME;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Um TIME
valor varia de -838:59:59
a 838:59:59
. Além disso, um TIME
valor pode ter uma parte fracionária de segundos com precisão de até microssegundos (6 dígitos).
Para definir uma coluna cujo tipo de dados é TIME
com uma parte de precisão fracionária de segundo, use a seguinte sintaxe:
column_name TIME(N);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, N
é um número inteiro que representa a parte fracionária, que tem até 6 dígitos.
O seguinte define uma coluna com TIME
tipo de dados incluindo 3 dígitos de segundos fracionários.
begin_at TIME(3);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Um TIME
valor leva 3 bytes para armazenamento. Se um TIME
valor incluir precisão de segundo fracionário, serão necessários bytes adicionais com base no número de dígitos da precisão de segundo fracionário.
A tabela a seguir ilustra o armazenamento necessário para precisão de frações de segundo.
Precisão de segundo fracionário | Armazenamento (BYTES) |
0 | 0 |
1, 2 | 1 |
3, 4 | 2 |
5, 6 | 3 |
Por exemplo, TIME
e TIME(0)
ocupa 3 bytes. TIME(1)
e TIME(2)
ocupa 4 bytes (3 + 1); TIME(3)
e TIME(6)
pegue 5 e 6 bytes.
Exemplo de tipo de dados MySQL TIME
Vejamos um exemplo de uso do TIME
tipo de dados para colunas em uma tabela.
Primeiro, crie uma nova tabela chamada tests
que consiste em quatro colunas: id
, name
, start_at
e end_at
. Os tipos de dados das colunas start_at
e end_at
são TIME
:
CREATE TABLE tests (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
start_at TIME,
end_at TIME
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, insira uma linha na tests
tabela.
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 1', '08:00:00','10:00:00');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Terceiro, consulte os dados da tests
tabela.
SELECT
name, start_at, end_at
FROM
tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+--------+----------+----------+
| name | start_at | end_at |
+--------+----------+----------+
| Test 1 | 08:00:00 | 10:00:00 |
+--------+----------+----------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Observe que usamos 'HH:MM:SS'
como valor de tempo literal na INSERT
instrução. Vamos examinar todos os literais de tempo válidos que o MySQL pode reconhecer.
Literais TIME do MySQL
O MySQL reconhece vários formatos de hora além do 'HH:MM:SS'
formato que mencionamos anteriormente.
MySQL permite que você use o 'HHMMSS'
formato sem delimitador (:) para representar o valor do tempo. Por exemplo, '08:30:00'
e '10:15:00'
pode ser reescrito como '083000'
e '101500'
.
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 2','083000','101500');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A tabela de testes terá as seguintes linhas:
+--------+----------+----------+
| name | start_at | end_at |
+--------+----------+----------+
| Test 1 | 08:00:00 | 10:00:00 |
| Test 2 | 08:30:00 | 10:15:00 |
+--------+----------+----------+
2 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
No entanto, 108000
não é um valor de tempo válido porque 80
não representa o minuto correto. Neste caso, o MySQL irá gerar um erro se você tentar inserir um valor de tempo inválido em uma tabela.
INSERT INTO tests(name,start_at,end_at)
VALUES('Test invalid','083000','108000');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O MySQL emitiu a seguinte mensagem de erro após executar a instrução acima.
Error Code: 1292. Incorrect time value: '108000' for column 'end_at' at row 1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Além do formato string, o MySQL aceita HHMMSS
como um número que representa um valor de tempo. Você também pode usar SS
, MMSS
. Por exemplo, em vez de usar '082000'
, você pode usar 082000
o seguinte:
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 3',082000,102000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----+--------+----------+----------+
| id | name | start_at | end_at |
+----+--------+----------+----------+
| 1 | Test 1 | 08:00:00 | 10:00:00 |
| 2 | Test 2 | 08:30:00 | 10:15:00 |
| 3 | Test 3 | 08:20:00 | 10:20:00 |
+----+--------+----------+----------+
3 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Para o intervalo de tempo, você pode usar o 'D HH:MM:SS'
formato onde D
representa dias com intervalo de 0 a 34. Uma sintaxe mais flexível é 'HH:MM'
, 'D HH:MM'
, 'D HH'
, ou 'SS'
.
Se você usar o delimitador :
, poderá usar um dígito para representar horas, minutos ou segundos. Por exemplo, 9:5:0
pode ser usado em vez de '09:05:00'
.
INSERT INTO tests(name,start_at,end_at)
VALUES('Test 4','9:5:0',100500);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----+--------+----------+----------+
| id | name | start_at | end_at |
+----+--------+----------+----------+
| 1 | Test 1 | 08:00:00 | 10:00:00 |
| 2 | Test 2 | 08:30:00 | 10:15:00 |
| 3 | Test 3 | 08:20:00 | 10:20:00 |
| 4 | Test 4 | 09:05:00 | 10:05:00 |
+----+--------+----------+----------+
4 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Funções úteis do MySQL TIME
MySQL fornece diversas funções temporais úteis para manipulação TIME
de dados.
1) Obtendo a hora atual
Para obter a hora atual do servidor de banco de dados, você usa a CURRENT_TIME
função. A CURRENT_TIME
função retorna o valor da hora atual como uma string ( 'HH:MM:SS'
) ou um valor numérico ( HHMMSS
) dependendo do contexto onde a função é usada.
As declarações a seguir ilustram a CURRENT_TIME
função em contextos de string e numérico:
SELECT
CURRENT_TIME() AS string_now,
CURRENT_TIME() + 0 AS numeric_now;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Adicionando e subtraindo tempo de um valor TIME
Para adicionar um TIME
valor a outro TIME
valor, você usa a ADDTIME
função. Para subtrair um TIME
valor de outro TIME
valor, você usa a SUBTIME
função.
A instrução a seguir adiciona e subtrai 2 horas e 30 minutos da hora atual.
SELECT
CURRENT_TIME(),
ADDTIME(CURRENT_TIME(), 023000),
SUBTIME(CURRENT_TIME(), 023000);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----------------+---------------------------------+---------------------------------+
| CURRENT_TIME() | ADDTIME(CURRENT_TIME(), 023000) | SUBTIME(CURRENT_TIME(), 023000) |
+----------------+---------------------------------+---------------------------------+
| 16:23:31 | 18:53:31 | 13:53:31 |
+----------------+---------------------------------+---------------------------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Além disso, você pode usar a TIMEDIFF()
função para obter a diferença entre dois TIME
valores.
SELECT
TIMEDIFF(end_at, start_at)
FROM
tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
3) Formatando valores TIME do MySQL
Embora o MySQL use 'HH:MM:SS'
ao recuperar e exibir um TIME
valor, você pode exibir o TIME
valor da maneira que preferir usando a TIME_FORMAT
função.
A TIME_FORMAT
função é semelhante à DATE_FORMAT
função, exceto que a TIME_FORMAT
função é usada apenas para formatar um TIME
valor.
Veja o exemplo a seguir.
SELECT
name,
TIME_FORMAT(start_at, '%h:%i %p') start_at,
TIME_FORMAT(end_at, '%h:%i %p') end_at
FROM
tests;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+--------+----------+----------+
| name | start_at | end_at |
+--------+----------+----------+
| Test 1 | 08:00 AM | 10:00 AM |
| Test 2 | 08:30 AM | 10:15 AM |
| Test 3 | 08:20 AM | 10:20 AM |
| Test 4 | 09:05 AM | 10:05 AM |
+--------+----------+----------+
4 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Na sequência de formato de hora acima:
-
%h
significa horas de dois dígitos de 0 a 12. -
%i
significa minutos de dois dígitos de 0 a 60. -
%p
significa AM ou PM.
4) Extraindo hora, minuto e segundo de um valor TIME
Para extrair a hora, o minuto e o segundo de um TIME
valor, você usa as funções HOUR
, MINUTE
e SECOND
da seguinte forma:
SELECT
start_at,
hour(start_at) hour,
minute(start_at) minute,
second(start_at) second
FROM
tests;
Saída:
+----------+------+--------+--------+
| start_at | hour | minute | second |
+----------+------+--------+--------+
| 08:00:00 | 8 | 0 | 0 |
| 08:30:00 | 8 | 30 | 0 |
| 08:20:00 | 8 | 20 | 0 |
| 09:05:00 | 9 | 5 | 0 |
+----------+------+--------+--------+
4 rows in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
5) Obtendo o valor do horário UTC
Para obter a hora UTC, você usa UTC_TIME
a função da seguinte forma:
SELECT
CURRENT_TIME(),
UTC_TIME();
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----------------+------------+
| CURRENT_TIME() | UTC_TIME() |
+----------------+------------+
| 16:24:43 | 09:24:43 |
+----------------+------------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Neste tutorial, abordamos muito sobre TIME
o tipo de dados MySQL e algumas funções temporais comumente usadas para manipulação TIME
de valores.