Resumo : neste tutorial, você aprenderá como usar valores de intervalo do MySQL para realizar aritmética de data e hora.
Introdução aos valores de intervalo do MySQL
Os valores de intervalo do MySQL são usados principalmente para cálculos de data e hora . Para criar um valor de intervalo, use a seguinte expressão:
INTERVAL expr unit
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Seguido pela INTERVAL
palavra-chave está o expr
que determina o valor do intervalo e unit
especifica a unidade do intervalo. Por exemplo, para criar um intervalo de 1 dia, use a seguinte expressão:
INTERVAL 1 DAY
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Observe que INTERVAL
e UNIT
não diferenciam maiúsculas de minúsculas, portanto a seguinte expressão é equivalente à acima:
interval 1 day
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Usamos principalmente valores de intervalo para aritmética de data e hora, conforme mostrado abaixo:
date + INTERVAL expr unit
date - INTERVAL expr unit
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Os valores de intervalo também são usados em várias funções temporais , como e .DATE_ADD,
DATE_SUB
TIMESTAMPADD
TIMESTAMPDIFF
MySQL define formatos padrão para expr
e unit
conforme ilustrado na tabela a seguir:
unidade | expressão |
---|---|
DIA | DIAS |
DIA_HORA | ‘DIAS HORAS’ |
DIA_MICROSECOND | ‘DIAS HORAS:MINUTOS:SEGUNDOS.MICROSSEGUNDOS’ |
DIA_MINUTE | ‘DIAS HORAS:MINUTOS’ |
DIA_SEGUNDO | ‘DIAS HORAS:MINUTOS:SEGUNDOS’ |
HORA | HORAS |
HORA_MICROSEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS.MICROSSEGUNDOS’ |
HORA_MINUTE | ‘HORAS:MINUTOS’ |
HORA_SEGUNDO | ‘HORAS:MINUTOS:SEGUNDOS’ |
MICROSSEGUNDO | MICROSSEGUNDOS |
MINUTO | MINUTOS |
MINUTE_MICROSECOND | ‘MINUTOS:SEGUNDOS.MICROSSEGUNDOS’ |
MINUTE_SECOND | ‘MINUTOS:SEGUNDOS’ |
MÊS | MESES |
TRIMESTRE | TRIMESTRE |
SEGUNDO | SEGUNDOS |
SECOND_MICROSECOND | ‘SEGUNDOS.MICROSSEGUNDOS’ |
SEMANA | SEMANAS |
ANO | ANOS |
ANO MÊS | ‘ANOS-MESES’ |
Exemplos de intervalo MySQL
A instrução a seguir adiciona 1 dia ao January 1st 2020
retorno January 2nd 2020
:
SELECT '2020-01-01' + INTERVAL 1 DAY;
+-------------------------------+
| '2020-01-01' + INTERVAL 1 DAY |
+-------------------------------+
| 2020-01-02 |
+-------------------------------+
1 row in set (0.01 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Se um valor de intervalo for usado em uma expressão que envolve um valor DATE
ou DATETIME
e o valor do intervalo estiver no lado direito da expressão, você poderá usar o valor negativo de expr
como mostrado no exemplo a seguir:
SELECT '2020-01-01' + INTERVAL -1 DAY;
+--------------------------------+
| '2020-01-01' + INTERVAL -1 DAY |
+--------------------------------+
| 2019-12-31 |
+--------------------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A instrução a seguir mostra como usar DATE_ADD
e DATE_SUB
adicionar/subtrair 1 mês de/para um valor de data:
SELECT DATE_ADD('2020-01-01', INTERVAL 1 MONTH) 1_MONTH_LATER,
DATE_SUB('2020-01-01',INTERVAL 1 MONTH) 1_MONTH_BEFORE;
+---------------+----------------+
| 1_MONTH_LATER | 1_MONTH_BEFORE |
+---------------+----------------+
| 2020-02-01 | 2019-12-01 |
+---------------+----------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta a seguir usa TIMESTAMPADD(unit,interval,expression)
função para adicionar 30 minutos a um valor de carimbo de data/hora:
SELECT TIMESTAMPADD(MINUTE,30,'2020-01-01') 30_MINUTES_LATER;
+---------------------+
| 30_MINUTES_LATER |
+---------------------+
| 2020-01-01 00:30:00 |
+---------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Exemplo prático de intervalo MySQL
Vamos criar uma nova tabela chamada memberships
para demonstração:
CREATE TABLE memberships (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(355) NOT NULL,
plan VARCHAR(255) NOT NULL,
expired_date DATE NOT NULL
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Na memberships
tabela, a expired_date
coluna armazena a data de vencimento da associação de cada membro.
A instrução a seguir insere algumas linhas na memberships
tabela.
INSERT INTO memberships(email, plan, expired_date)
VALUES('[email protected]','Gold','2017-07-13'),
('[email protected]','Platinum','2017-07-10'),
('[email protected]','Silver','2017-07-15'),
('[email protected]','Gold','2017-07-20'),
('[email protected]','Silver','2017-07-08');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que hoje seja 2017-07-06
, você pode encontrar os membros cujas assinaturas expiraram em 7 dias usando a seguinte consulta:
SELECT
email,
plan,
expired_date,
DATEDIFF(expired_date, '2017-07-06') remaining_days
FROM
memberships
WHERE
'2017-07-06' BETWEEN DATE_SUB(expired_date, INTERVAL 7 DAY) AND expired_date;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta consulta, utilizamos a DATE_SUB
função para subtrair a data de vencimento por 7 dias especificados por um valor de intervalo ( INTERVAL 7 DAY
).
Neste tutorial, você aprendeu como usar o valor do intervalo MySQL para a aritmética de data e hora.