MySQL ha un PERIOD_DIFF()
funzione che permette di trovare la differenza tra due periodi. I periodi sono forniti come due argomenti separati e devono avere il formato AAMM o AAAAMM .
Sintassi
La sintassi è questa:
PERIOD_DIFF(P1,P2)
Dove P1
è il primo punto e P2
è il secondo.
Nota che sebbene questa funzione sembri utilizzare le date, gli argomenti del periodo non sono in realtà valori di data.
Esempio 1 – Utilizzo di base
Ecco un esempio di base.
SELECT PERIOD_DIFF(199906, 199905);
Risultato:
+-----------------------------+ | PERIOD_DIFF(199906, 199905) | +-----------------------------+ | 1 | +-----------------------------+
Quindi in questo caso c'è 1 mese di differenza tra i due periodi.
Esempio 2 – Risultati negativi
Ecco cosa succede se scambiamo questi due periodi.
SELECT PERIOD_DIFF(199905, 199906);
Risultato:
+-----------------------------+ | PERIOD_DIFF(199905, 199906) | +-----------------------------+ | -1 | +-----------------------------+
Come previsto, il risultato è un valore negativo.
Esempio 3 – Anni a due cifre
Puoi anche utilizzare anni a due cifre (in modo che il formato sia AAMM ). Ecco un esempio da dimostrare.
SELECT PERIOD_DIFF(9906, 9905);
Risultato:
+-------------------------+ | PERIOD_DIFF(9906, 9905) | +-------------------------+ | 1 | +-------------------------+
Esempio 4:utilizzo della data corrente
Ecco un esempio che deriva uno degli argomenti del periodo dalla data corrente. Tale periodo viene quindi confrontato con un periodo fisso.
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';
Risultato:
+--------------+----------------+-----------------+------------+ | Current Date | Current Period | Previous Period | Difference | +--------------+----------------+-----------------+------------+ | 2018-06-30 | 201806 | 199901 | 233 | +--------------+----------------+-----------------+------------+
Esempio 5:un esempio di database
Ecco un esempio che porta l'esempio precedente un ulteriore passo avanti e confronta il periodo corrente con un periodo derivato da una data in un database.
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;
Risultato:
+----------------+---------------------+----------------+------------+ | Current Period | Payment Date | Payment Period | Difference | +----------------+---------------------+----------------+------------+ | 201806 | 2005-05-25 11:30:37 | 200505 | -157 | +----------------+---------------------+----------------+------------+