Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL DATEDIFF() vs TIMESTAMPDIFF():Apa Bedanya?

Artikel ini membahas perbedaan antara dua fungsi MySQL; DATEDIFF() dan TIMESTAMPDIFF() .

Kedua fungsi mengembalikan perbedaan antara dua tanggal dan/atau waktu, tetapi hasilnya berbeda antara kedua fungsi.

Tabel berikut merangkum perbedaan antara kedua fungsi ini:

DATEDIFF() TIMESTAMPDIFF()
Memerlukan 2 argumen. Memerlukan 3 argumen.
Kurangi argumen ke-2 dari argumen ke-1 (expr1 expr2). Kurangi argumen ke-2 dari argumen ke-3 (expr2 expr1).
Hasil dinyatakan sebagai nilai dalam hari. Hasil dinyatakan sebagai unit yang disediakan oleh argumen pertama.
Hanya dapat membandingkan nilai tanggal argumennya. Dapat membandingkan nilai tanggal dan waktu dari argumennya.

Contoh 1 – Operasi Dasar

Berikut adalah contoh yang menunjukkan cara kerja fungsi-fungsi ini, dan bagaimana hasilnya berbeda, bahkan saat menggunakan unit yang sama.

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';

Hasil:

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

Jadi kedua fungsi mengembalikan perbedaan dalam hari, namun satu hasil positif dan yang lainnya negatif. Ini karena DATEDIFF() kurangi tanggal kedua dari tanggal pertama, sedangkan TIMESTAMPDIFF() kurangi tanggal pertama dari tanggal kedua.

Contoh 2 – Mengubah Unit

Seperti yang ditunjukkan contoh sebelumnya, TIMESTAMPDIFF() memungkinkan Anda untuk menentukan unit untuk hasil yang akan dikembalikan sebagai (sebenarnya, ini memerlukan Anda untuk menentukan unit). Sebaliknya, DATEDIFF() tidak memungkinkan Anda untuk menentukan unit. Ini hanya mengembalikan hasil dalam beberapa hari.

Jadi kita bisa memodifikasi contoh sebelumnya sehingga TIMESTAMPDIFF() mengembalikan jumlah jam, bukan hari:

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';

Hasil:

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

Anda dapat menggunakan hingga mikrodetik:

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';

Hasil:

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

Contoh 3 – Presisi

Ketepatan DATEDIFF() adalah satu hari, dan TIMESTAMPDIFF() bisa turun ke mikrodetik. Namun ketepatan TIMESTAMPDIFF() (dan unit yang dibandingkan) masih bergantung pada unit yang ditentukan.

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';

Hasil:

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

Dan inilah hasilnya jika kita menambah tanggal ke-2 dengan satu detik (yang membawanya ke hari berikutnya):

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';

Hasil:

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

Berikut contoh lain, kali ini melihat tampilannya saat kita mengembalikan bulan, kuartal, dan tahun ketika perbedaannya adalah satu bulan (atau 31 hari):

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';

Hasil:

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

Contoh 4 – Tipe Argumen Salah

Kedua fungsi mengembalikan null jika diberikan tipe argumen yang salah.

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

Hasil:

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

Contoh 5 – Tipe Argumen Campuran

Kedua fungsi tersebut memungkinkan Anda memberikan tanggal sebagai satu argumen dan waktu tanggal sebagai argumen lain.

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

Hasil:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Query Parameterized untuk MySQL dengan C#

  2. Bagaimana memilih dari MySQL di mana nama Tabel adalah Variabel

  3. MySQL Pesan sebelum Grup oleh

  4. Pemecahan Masalah Campuran ilegal kesalahan susunan di mysql

  5. Penggabungan string di MySQL