Salta al contenuto

Archivi

  • Gennaio 2022
  • Dicembre 2021
  • Novembre 2021
  • Ottobre 2021
  • Settembre 2021

Categorie

  • Nessuna categoria
Trend RepositoryArticles and guides
Articles

Database.Guide

Il Gennaio 27, 2022 da admin

Questo articolo esamina la differenza tra due funzioni MySQL; DATEDIFF() e TIMESTAMPDIFF().

Entrambe le funzioni restituiscono la differenza tra due date e/o tempi, ma il risultato è diverso tra le due funzioni.

La seguente tabella riassume la differenza tra queste due funzioni:

DATEDIFF() TIMESTAMPDIFF()
Richiede 2 argomenti. Richiede 3 argomenti.
Sottrae il 2° argomento dal 1° (expr1 – expr2). Sottrae il 2° argomento dal 3° (expr2 – expr1).
Il risultato è espresso come valore in giorni. Il risultato è espresso come l’unità fornita dal primo argomento.
Può confrontare solo il valore della data dei suoi argomenti. Può confrontare il valore di data e ora dei suoi argomenti.
  • Esempio 1 – Operazione di base
  • Esempio 2 – Cambiare l’unità
  • Esempio 3 – Precisione
  • Esempio 4 – Tipi di argomenti sbagliati
  • Esempio 5 – Tipi di argomento misti

Esempio 1 – Operazione di base

Ecco un esempio che dimostra come queste funzioni lavorano, e come i risultati sono diversi, anche quando si usa la stessa unità.

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'TIMESTAMPDIFF';

Risultato:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Quindi entrambe le funzioni restituiscono la differenza in giorni, tuttavia un risultato è positivo e l’altro negativo. Questo perché DATEDIFF() sottrae la seconda data dalla prima, mentre TIMESTAMPDIFF() sottrae la prima data dalla seconda.

Esempio 2 – Cambiare l’unità

Come dimostra l’esempio precedente, la TIMESTAMPDIFF() vi permette di specificare un’unità per i risultati da restituire (in effetti, vi richiede di specificare l’unità). D’altra parte, DATEDIFF() non vi permette di specificare un’unità. Restituisce solo il risultato in giorni.

Potremmo quindi modificare l’esempio precedente in modo che TIMESTAMPDIFF() restituisca il numero di ore invece di giorni:

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(hour, @date1, @date2) AS 'TIMESTAMPDIFF';

Risultato:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -24 |+----------+---------------+

Si può andare fino ai microsecondi:

SET @date1 = '2010-10-11 00:00:00', @date2 = '2010-10-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'TIMESTAMPDIFF';

Risultato:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -86400000000 |+----------+---------------+

Esempio 3 – Precisione

La precisione di DATEDIFF() è un giorno, e TIMESTAMPDIFF() può scendere al microsecondo. Tuttavia la precisione di TIMESTAMPDIFF() (e l’unità che confronta) dipende ancora dall’unità specificata.

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-10 23:59:59';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Risultato:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| 0 | 0 | 23 | 1439 | 86399 | 86399000000 |+----------+------+-------+---------+---------+--------------+

Ed ecco il risultato se incrementiamo la seconda data di un secondo (che la porta al giorno successivo):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-10-11 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours', TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes', TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds', TIMESTAMPDIFF(microsecond, @date1, @date2) AS 'Microseconds';

Risultato:

+----------+------+-------+---------+---------+--------------+| DATEDIFF | Days | Hours | Minutes | Seconds | Microseconds |+----------+------+-------+---------+---------+--------------+| -1 | 1 | 24 | 1440 | 86400 | 86400000000 |+----------+------+-------+---------+---------+--------------+

Ecco un altro esempio, questa volta vediamo come appare quando restituiamo mesi, trimestri e anni quando la differenza è di un mese (o 31 giorni):

SET @date1 = '2010-10-10 00:00:00', @date2 = '2010-11-10 00:00:00';SELECT DATEDIFF(@date1, @date2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @date1, @date2) AS 'Days', TIMESTAMPDIFF(month, @date1, @date2) AS 'Month', TIMESTAMPDIFF(quarter, @date1, @date2) AS 'Quarter', TIMESTAMPDIFF(year, @date1, @date2) AS 'Year';

Risultato:

+----------+------+-------+---------+------+| DATEDIFF | Days | Month | Quarter | Year |+----------+------+-------+---------+------+| -31 | 31 | 1 | 0 | 0 |+----------+------+-------+---------+------+

Esempio 4 – Tipi di argomenti sbagliati

Entrambe le funzioni restituiscono null se viene loro passato il tipo di argomento sbagliato.

SET @time1 = '12:15:35', @time2 = '00:00:00';SELECT DATEDIFF(@time1, @time2) AS 'DATEDIFF', TIMESTAMPDIFF(day, @time1, @time2) AS 'TIMESTAMPDIFF';

Risultato:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| NULL | NULL |+----------+---------------+

Esempio 5 – Tipi di argomento misti

Entrambe le funzioni permettono di fornire una data come argomento e un datetime come altro argomento.

SET @thedate = '2010-10-11', @thedatetime = '2010-10-10 00:00:00';SELECT DATEDIFF(@thedate, @thedatetime) AS 'DATEDIFF', TIMESTAMPDIFF(day, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Risultato:

+----------+---------------+| DATEDIFF | TIMESTAMPDIFF |+----------+---------------+| 1 | -1 |+----------+---------------+

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Archivi

  • Gennaio 2022
  • Dicembre 2021
  • Novembre 2021
  • Ottobre 2021
  • Settembre 2021

Meta

  • Accedi
  • Feed dei contenuti
  • Feed dei commenti
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Tema da ThemeinProgress | Offerto orgogliosamente da WordPress