MySQL tem um
PERIOD_DIFF()
função que permite encontrar a diferença entre dois períodos. Os pontos são fornecidos como dois argumentos separados e devem estar no formato AAMM ou AAAAMM . Sintaxe
A sintaxe fica assim:
PERIOD_DIFF(P1,P2)
Onde
P1
é o primeiro período e P2
é o segundo. Observe que, embora essa função pareça usar datas, os argumentos de período não são, na verdade, valores de data.
Exemplo 1 – Uso básico
Aqui está um exemplo básico.
SELECT PERIOD_DIFF(199906, 199905);
Resultado:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Portanto, neste caso, há uma diferença de 1 mês entre os dois períodos.
Exemplo 2 - Resultados negativos
Aqui está o que acontece se trocarmos esses dois períodos.
SELECT PERIOD_DIFF(199905, 199906);
Resultado:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Como esperado, o resultado é um valor negativo.
Exemplo 3 – Anos de dois dígitos
Você também pode usar anos de dois dígitos (para que o formato seja AAMM ). Aqui está um exemplo para demonstrar.
SELECT PERIOD_DIFF(9906, 9905);
Resultado:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Exemplo 4 – Usando a data atual
Aqui está um exemplo que deriva um dos argumentos de período da data atual. Esse período é então comparado a um período fixo.
SELECT CURDATE( ) AS 'Current Date', EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', 199901 AS 'Previous Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM CURDATE( )), 199901) AS 'Difference';
Resultado:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Exemplo 5 – Um exemplo de banco de dados
Aqui está um exemplo que leva o exemplo anterior um passo adiante e compara o período atual com um período derivado de uma data em um banco de dados.
USE sakila; SELECT EXTRACT(YEAR_MONTH FROM CURDATE( )) AS 'Current Period', payment_date AS 'Payment Date', EXTRACT(YEAR_MONTH FROM payment_date) AS 'Payment Period', PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM payment_date), EXTRACT(YEAR_MONTH FROM CURDATE( ))) AS 'Difference' FROM payment WHERE payment_id = 1;
Resultado:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+