MySQL tiene un PERIOD_DIFF()
función que le permite encontrar la diferencia entre dos períodos. Los puntos se proporcionan como dos argumentos separados y deben tener el formato YYMM o AAAAMM .
Sintaxis
La sintaxis es así:
PERIOD_DIFF(P1,P2)
Donde P1
es el primer punto, y P2
es el segundo.
Tenga en cuenta que aunque esta función parece usar fechas, los argumentos de período no son en realidad valores de fecha.
Ejemplo 1:uso básico
Este es un ejemplo básico.
SELECT PERIOD_DIFF(199906, 199905);
Resultado:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Entonces, en este caso, hay una diferencia de 1 mes entre los dos períodos.
Ejemplo 2:resultados negativos
Esto es lo que sucede si intercambiamos esos dos períodos.
SELECT PERIOD_DIFF(199905, 199906);
Resultado:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Como era de esperar, el resultado es un valor negativo.
Ejemplo 3:años de dos dígitos
También puede usar años de dos dígitos (para que el formato sea YYMM ). Aquí hay un ejemplo para demostrarlo.
SELECT PERIOD_DIFF(9906, 9905);
Resultado:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Ejemplo 4:uso de la fecha actual
Aquí hay un ejemplo que deriva uno de los argumentos de período de la fecha actual. Ese período luego se compara con un período fijo.
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 | +--------------+----------------+-----------------+------------+
Ejemplo 5:un ejemplo de base de datos
Aquí hay un ejemplo que lleva el ejemplo anterior un paso más allá y compara el período actual con un período derivado de una fecha en una base de datos.
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 | +----------------+---------------------+----------------+------------+