Saya punya pertanyaan: Apakah mungkin untuk memilih dari database MySQL dengan membandingkan satu string DATE "2010-04-29" dengan string yang disimpan sebagai DATETIME (2010-04-29 10:00)?
Saya memiliki satu pemilih tanggal yang memfilter data dan saya ingin menanyakan tabel berdasarkan bidang DATETIME seperti ini:
SELECT * FROM `calendar` WHERE startTime = '2010-04-29'"
... dan saya ingin mendapatkan baris yang memiliki nilai DATETIME "2010-04-29 10:00".
Ada saran? Terima kasih.
mysql
datetime
comparison
Manny Calavera
sumber
sumber
startTime
diindeks.Jika Anda ingin memilih semua baris di mana bagian DATE dari kolom DATETIME cocok dengan literal tertentu, Anda tidak dapat melakukannya seperti ini:
karena MySQL tidak dapat membandingkan DATE dan DATETIME secara langsung. Apa yang dilakukan MySQL, itu memperpanjang literal DATE yang diberikan dengan waktu '00: 00: 00 '. Jadi kondisimu menjadi
Tentu bukan yang Anda inginkan!
Kondisinya adalah kisaran dan karenanya harus diberikan sebagai kisaran. Ada beberapa kemungkinan:
Ada kemungkinan kecil untuk kesalahan pertama - ketika kolom DATETIME Anda menggunakan resolusi sub-detik dan ada janji temu pada pukul 23:59:59 + epsilon. Secara umum saya menyarankan untuk menggunakan varian kedua.
Kedua varian dapat menggunakan indeks pada startTime yang akan menjadi penting saat tabel berkembang.
sumber
date()
,year()
,datediff()
atau serupa)00:00:00
. sekarang hasil saya masuk akalSELECT * FROM `calendar` WHERE DATE_FORMAT(startTime, "%Y-%m-%d") = '2010-04-29'"
ATAU
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29'
sumber
SELECT * FROM sample_table WHERE last_visit = DATE_FORMAT('2014-11-24 10:48:09','%Y-%m-%d %H:%i:%s')
ini untuk format datetime di mysql menggunakan
DATE_FORMAT(date,format)
.sumber
SELECT * FROM `calendar` WHERE DATE(startTime) = '2010-04-29';
ini membantu, Anda dapat mengonversi nilai seperti
DATE
sebelum membandingkan.sumber
Anda dapat mentransmisikan bidang DATETIME menjadi DATE sebagai:
SELECT * FROM `calendar` WHERE CAST(startTime AS DATE) = '2010-04-29'
Ini sangat efisien.
sumber
startTime
diindeksSELECT * FROM `calendar` WHERE startTime like '2010-04-29%'
Anda juga dapat menggunakan operator perbandingan pada tanggal MySQL jika Anda ingin menemukan sesuatu setelah atau sebelumnya. Ini karena mereka ditulis sedemikian rupa (nilai terbesar ke terkecil dengan nol di depan) sehingga pengurutan string sederhana akan mengurutkannya dengan benar.
sumber