Bagaimana cara mengurangi 30 hari dari datetime saat ini di mysql?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
Untuk siapa saja yang tidak ingin menggunakan DATE_SUB
, gunakan CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
NOW() - INTERVAL 30 DAY
. Karena pertanyaan itu menyebutkan "kurangi 30 hari dari datetime saat ini ", itu mungkin bukan yang diinginkan OP.current_timestamp
sebagai ganticurrent_date
Jangan gunakan
NOW()
karena Anda kehilangan cache kueri atau optimisasi karena kueri itu berbeda setiap saat. Lihat daftar fungsi yang tidak boleh Anda gunakan dalam dokumentasi MySQL .Dalam kode di bawah ini, mari kita asumsikan tabel ini berkembang seiring waktu. Barang baru ditambahkan dan Anda ingin menunjukkan barang-barang itu dalam 30 hari terakhir. Ini adalah kasus yang paling umum.
Perhatikan bahwa tanggal telah ditambahkan sebagai string. Lebih baik menambahkan tanggal dengan cara ini, dari kode panggilan Anda, daripada menggunakan
NOW()
fungsi karena membunuh caching Anda.Anda dapat menggunakan
BETWEEN
jika Anda benar-benar hanya menginginkan barang-barang mulai dari detik ini hingga 30 hari sebelum detik ini, tapi itu bukan kasus penggunaan umum dalam pengalaman saya, jadi saya berharap permintaan yang disederhanakan dapat melayani Anda dengan baik.sumber
NOW()
dan tetap menggunakannya dalam jawaban Anda. o_O PS: kueri Anda akan mengembalikan hasil lain , bukan apa yang OP inginkanBETWEEN
dan>=
apakah operator berbeda, Anda tahu? Kueri saya membatasi hasil yang ditetapkan untuk30 days ago AND today
inieverything after 30 days ago
. Jadi,tomorrow
catatan tidak akan cocok dengan milik saya dan permintaan awal Anda, tetapi akan cocok dengan jawaban iniMySQL kurangi hari dari sekarang:
Cetakan:
Argumen Interval Temporal Expression Unit lainnya:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals
sumber
Anda juga bisa menggunakan
sumber
Anda dapat memformat dengan menggunakan format tanggal dalam SQL.
sumber
cara lain
sumber
Jika Anda hanya perlu tanggal dan bukan waktu gunakan:
Karena
curdate()
menghilangkan komponen waktu, maka berpotensi lebih cepat daripadanow()
dan lebih "benar secara semantik" dalam kasus di mana Anda hanya tertarik pada tanggal.Juga,
subdate()
kelebihan 2-arity berpotensi lebih cepat daripada menggunakaninterval
.interval
dimaksudkan untuk kasus ketika Anda membutuhkan komponen non-hari.sumber
subdate(curdate(), 30)
lebih dari faasterCURRENT_DATE - INTERVAL 30 DAY
? Apakah Anda punya bukti? Dan seberapa cepat itu? Beberapa mikrodetik?subdate
mungkin lebih cepat entah bagaimana mungkin dijelaskan, menurut pendapat Anda, dengan "2-arity overload", tapi, tolong maafkan saya jika ini adalah pertanyaan bodoh, apa arti kata-kata itu (berkenaan dengan fungsi )? Khususnya, apa itu "2-arity"?curdate()
mungkin sebenarnya merupakan pilihan yang salah, karena OP tampaknya ingin "mengurangi 30 hari dari datetime saat ini " (penekanan tambang).