2012-05-27 29 views
25

DateTime sütununda zaman bölümünü yok sayarak MySQL'deki tarihleri ​​karşılaştırmam gerekir. Aşağıdaki SQL'i denedim.Bir DateTime alanının MySQL yok sayma zaman bölümündeki tarihlerin karşılaştırılması

SELECT * FROM order_table where order_date=date_format('2012-05-03', '%Y-%m-%d'); 

O MySQL tablosunda bir tarih 2012-05-03 10:16:46 olsa bile herhangi bir satır almak değil. MySQL'de tarihleri ​​karşılaştırırken DateTime alanındaki zaman bölümü nasıl göz ardı edilebilir?

+0

biri benim için çalıştı mı? – Sebas

+0

'DateTime'. – Tiny

cevap

42

Sen DATE işlevini kullanabilirsiniz:

SELECT col1, col2, ..., coln 
FROM order_table 
WHERE date(order_date) = '2012-05-03' 

Ama masa büyükse ve siz order date üzerinde bir dizin varsa bu, daha verimlidir:

SELECT col1, col2, ..., coln 
FROM order_table 
WHERE order_date >= '2012-05-03' 
AND order_date < '2012-05-04' 
2
SELECT * FROM order_table WHERE date(order_date) = '2012-05-03'; 
+2

, bu "order_date" dizini kullanamaz – Marki555

5

İsterseniz Bir tarihte geçmek için şu şekilde deneyebilirsiniz:

where YEAR(order_date)='2012' AND MONTH(order_date)='05' AND DAY(order_date)='03' 

Daha fazla işlev için this'a bakabilirsiniz.

2

Belki de date() gibi işlevleri kullanabilirsiniz. Ancak bu durumda hız azaltılabilir, çünkü indeks kullanamaz. Yani,

SELECT * FROM order_table 
WHERE order_date between('2012-05-03 0:0:0' and '2012-05-03 23:59:59') 
2

@ Mark iyi bir yaklaşım var kullanmak ama sadece her zaman hesaplamak ve bu durumda ertesi gün bulmak zorunda olacağı dikkatli olmak önerilir. Bunu önlemek istiyorsanız ve hala zaman göz ardı ederse aşağıdakileri yapabilirsiniz:

WHERE order_date >= '2012-05-27 00:00:00' AND order_date <= '2012-05-27 23:59:59' 

Bu mantıklı umuyoruz. Daha fazla bilgi için

DATEDIFF() Subtract two dates 
TIMEDIFF() Subtract time 
TIMESTAMPDIFF() Subtract an interval from a datetime expression 
PERIOD_DIFF() Return the number of months between periods 

Tarih fonksiyonları MySQL documentation tarih: MySQL tarihleri ​​karşılaştırırken Aşağıdakilerden

1

Bu biraz eski .... ama doğru cevap da benzeri aşağıda kolon ORDER_DATE de DATE_FORMAT kullanıyor:

SELECT * FROM order_table where date_format(order_date, '%Y-%m-%d')='2012-05-03'; 
0

i vardı benim durumda, DATE_FORMAT ve CONVERT_TZ

sadece ORDER_DATE veri türü ne bu

DATE_FORMAT(CONVERT_TZ(`order_item`.created, '+0:00', '+2:00'), '%d/%m/%Y %H:%i') 

BETWEEN 
('12/02/2018 01:42') 
AND 
('12/02/2018 10:51') 
İlgili konular