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

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

Artikel ini membahas perbedaan antara TIMEDIFF() MySQL dan TIMESTAMPDIFF() fungsi.

Kedua fungsi melakukan hal yang serupa, tetapi ada beberapa perbedaan signifikan di antara keduanya.

Tabel berikut merangkum perbedaan antara kedua fungsi ini:

TIMEDIFF() TIMESTAMPDIFF()
Memerlukan 2 argumen. Memerlukan 3 argumen.
Mengurangi argumen ke-2 dari argumen ke-1 (date1 date2). Kurangi argumen ke-2 dari argumen ke-3 (date2 date1).
Hasil dinyatakan sebagai nilai waktu (dan memiliki batasan tipe data waktu). Hasil adalah bilangan bulat, dinyatakan oleh sejumlah unit seperti yang diberikan oleh argumen pertama.
Menerima ekspresi waktu atau datetime. Menerima ekspresi tanggal atau waktu.
Kedua argumen harus bertipe sama (baik waktu maupun tanggal). Kedua argumen dapat memiliki tipe yang berbeda (tanggal atau waktu).

Contoh 1 – Perbedaan Dasar

Berikut adalah contoh yang menunjukkan perbedaan mendasar antara fungsi-fungsi ini.

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

Hasil:

+----------+---------------+
| TIMEDIFF | TIMESTAMPDIFF |
+----------+---------------+
| 24:00:00 |           -24 |
+----------+---------------+

Jadi kita dapat melihat bahwa TIMEEDIFF() mengembalikan nilai waktu, dan TIMESTAMPDIFF() mengembalikan bilangan bulat.

Juga, TIMEEDIFF() tanggal 2 dikurangi dari tanggal 1, sedangkan TIMESTAMPDIFF() dikurangi tanggal 1 dari tanggal 2.

Contoh 2 – Mengubah Unit

Seperti disebutkan, TIMESTAMPDIFF() memungkinkan kita untuk menentukan unit mana yang mewakili hasil. Berikut beberapa contohnya:

SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF',
  TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours',
  TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes',
  TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds';

Hasil:

+----------+-------+---------+---------+
| TIMEDIFF | Hours | Minutes | Seconds |
+----------+-------+---------+---------+
| 36:15:35 |   -36 |   -2175 | -130535 |
+----------+-------+---------+---------+

Namun, inilah yang terjadi jika kita menggunakan unit yang lebih besar dari perbedaan waktu sebenarnya:

SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF',
  TIMESTAMPDIFF(day, @date1, @date2) AS 'Days',
  TIMESTAMPDIFF(week, @date1, @date2) AS 'Weeks',
  TIMESTAMPDIFF(month, @date1, @date2) AS 'Months';

Hasil:

+----------+------+-------+--------+
| TIMEDIFF | Days | Weeks | Months |
+----------+------+-------+--------+
| 36:15:35 |   -1 |     0 |      0 |
+----------+------+-------+--------+

Dalam hal ini, perbedaan waktu tidak cukup besar untuk mempengaruhi nilai minggu atau bulan.

Contoh 3 – Tipe Argumen Salah

Berikut adalah contoh yang terjadi ketika Anda meneruskan jenis argumen yang salah ke setiap fungsi.

SET @date1 = '2010-10-11', @date2 = '2010-10-10', @time1 = '12:15:35', @time2 = '00:00:00';
SELECT 
  TIMEDIFF(@date1, @date2) AS 'TIMEDIFF Date',
  TIMESTAMPDIFF(hour, @time1, @time2) AS 'TIMESTAMPDIFF Time';

Hasil:

+---------------+--------------------+
| TIMEDIFF Date | TIMESTAMPDIFF Time |
+---------------+--------------------+
| 00:00:00      |               NULL |
+---------------+--------------------+

TIMEDIFF() tidak mendukung tipe data 'tanggal', sehingga mengembalikan 00:00:00 .

Dan TIMESTAMPDIFF() fungsi tidak mendukung tipe data 'waktu', sehingga mengembalikan NULL .

Contoh 4 – Tipe Argumen Campuran

Inilah yang terjadi jika Anda menyediakan dua tipe data yang berbeda untuk setiap fungsi.

SET @thedate = '2010-10-11', @thetime = '12:15:35', @thedatetime = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@thetime, @thedatetime) AS 'TIMEDIFF',
  TIMESTAMPDIFF(hour, @thedate, @thedatetime) AS 'TIMESTAMPDIFF';

Hasil:

+----------+---------------+
| TIMEDIFF | TIMESTAMPDIFF |
+----------+---------------+
| NULL     |           -24 |
+----------+---------------+

Jadi kita dapat melihat bahwa TIMESTAMPDIFF() menangani tipe data campuran dengan baik (asalkan itu tanggal atau tanggal-dan-waktu).

Namun, TIMEDIFF() mengharuskan kedua argumen memiliki tipe yang sama, jadi kita mendapatkan NULL , meskipun kedua argumen adalah tipe yang didukung oleh fungsi (waktu dan waktu).

Kami dapat mengonfirmasi bahwa kedua tipe tersebut sebenarnya didukung oleh fungsi ini dengan contoh berikut:

SET @thetime1 = '12:15:35', @thetime2 = '10:15:35', @thedatetime1 = '2010-10-12 00:00:00', @thedatetime2 = '2010-10-10 00:00:00';
SELECT 
  TIMEDIFF(@thetime1, @thetime2) AS 'time',
  TIMEDIFF(@thedatetime1, @thedatetime2) AS 'datetime';

Hasil:

+----------+----------+
| time     | datetime |
+----------+----------+
| 02:00:00 | 48:00:00 |
+----------+----------+

Jadi tidak masalah, selama kedua argumen memiliki tipe yang sama (baik nilai waktu atau waktu).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan menggunakan STRAIGHT_JOIN dengan MySQL

  2. kueri pivot/tab silang mysql

  3. Kapan menggunakan MongoDB atau sistem database berorientasi dokumen lainnya?

  4. Fungsi MySQL COT() – Mengembalikan Kotangen Angka di MySQL

  5. Memigrasikan MySQL ke PostgreSQL di AWS RDS, Bagian 2