Intervalo MySQL

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 unitLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Seguido pela INTERVALpalavra-chave está o exprque determina o valor do intervalo e unitespecifica a unidade do intervalo. Por exemplo, para criar um intervalo de 1 dia, use a seguinte expressão:

INTERVAL 1 DAYLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que INTERVALe UNITnão diferenciam maiúsculas de minúsculas, portanto a seguinte expressão é equivalente à acima:

interval 1 dayLinguagem 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 unitLinguagem 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_SUBTIMESTAMPADDTIMESTAMPDIFF

MySQL define formatos padrão para expre unitconforme 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 2020retorno 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 DATEou DATETIMEe o valor do intervalo estiver no lado direito da expressão, você poderá usar o valor negativo de   exprcomo 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_ADDe DATE_SUBadicionar/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 membershipspara 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 membershipstabela, a expired_datecoluna armazena a data de vencimento da associação de cada membro.

A instrução a seguir insere algumas linhas na membershipstabela.

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 )
Exemplo de intervalo MySQL

Nesta consulta, utilizamos a DATE_SUBfunçã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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *