Saat mengembalikan tanggal/waktu saat ini di MySQL, ada berbagai fungsi yang dapat Anda pilih. Sebagian besar hanyalah sinonim untuk fungsi lain.
Namun, ada dua fungsi yang tampaknya melakukan hal yang sama, tetapi sebenarnya sedikit berbeda. Fungsi yang saya maksud adalah SYSDATE()
dan NOW()
.
Perbedaan Antara SYSDATE() dan NOW()
Kedua fungsi mengembalikan tanggal dan waktu saat ini. Namun, di sinilah perbedaannya:
SYSDATE()
mengembalikan waktu eksekusinya.NOW()
mengembalikan waktu konstan yang menunjukkan waktu di mana pernyataan mulai dieksekusi.SET TIMESTAMP
pernyataan mempengaruhi nilai yang dikembalikan olehNOW()
tetapi tidak denganSYSDATE()
.
Jadi dalam banyak kasus, Anda mungkin akan mendapatkan hasil yang sama terlepas dari fungsi mana yang Anda gunakan. Namun, jika pernyataan Anda lebih kompleks dan membutuhkan waktu untuk dijalankan, Anda bisa mendapatkan perbedaan yang cukup besar dalam nilai kembalian tergantung pada fungsi yang Anda gunakan.
Contoh
Berikut adalah contoh untuk menunjukkan bagaimana nilai yang dikembalikan dapat bervariasi, bergantung pada fungsi yang Anda gunakan.
SELECT SYSDATE(), SLEEP(10) AS '', SYSDATE(), NOW(), SLEEP(10) AS '', NOW();
Hasil:
+---------------------+---+---------------------+---------------------+---+---------------------+ | SYSDATE() | | SYSDATE() | NOW() | | NOW() | +---------------------+---+---------------------+---------------------+---+---------------------+ | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 | +---------------------+---+---------------------+---------------------+---+---------------------+
Jadi dalam contoh ini, saya menjalankan SYSDATE()
dua kali, tetapi dengan jeda 10 detik di antaranya. Saya kemudian melakukan hal yang sama dengan NOW()
.
Seperti yang diharapkan, jeda 10 detik memengaruhi nilai kembalian SYSDATE()
. kedua tapi bukan NOW()
second yang kedua . Faktanya, nilai untuk kedua instance NOW()
sama dengan contoh pertama SYSDATE()
, saat itulah pernyataan mulai berjalan.
Menjadikan SYSDATE() sebagai Alias untuk SEKARANG()
Jika perbedaan antara kedua fungsi ini menyebabkan Anda bermasalah, Anda sebenarnya memiliki opsi untuk membuat SYSDATE()
alias untuk NOW()
.
Untuk melakukannya, gunakan --sysdate-is-now
opsi perintah server. Untuk informasi lebih lanjut, lihat –sysdate-is-now di situs web dokumentasi MySQL.