2013-05-20 27 views
8

Bu tabloda bir günlük dosyası için kullanılan bir '' Mysql Tablosu '' log_date '' isimli bir alan var Ve tarihi aşağıdaki biçimde (% Y-% m-% d % H:% i.% S) .DB'de tarihler bu 2013-20-05 00: 00.00 gibi bir şeye benziyor. Bugünkü tarihin 2013-20-05 olduğunu söyleyelim. Ve 2013-01-01 tarihinden günümüze kadar günlük dosyalarım var. Böyle bir sorguyu çalıştırırsanız: (daha az sonra 00.00datetime tarafından filtre MYSQL biçimlendirmesi

Ve < tersine çevirirsek: Bu daha büyük 2013/05/05 00 olan satırlar dahil DB her satır dönüyor

SELECT * FROM log_table 
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') < '2013-05-05 00:00.00' 

) a> (büyüktür sonra) şöyle bir sorgu ile:

SELECT * FROM log_table 
WHERE STR_TO_DATE(log_date, '%Y-%m-%d %H:%i.%s') > '2013-05-05 00:00.00' 

sonra SIFIR satırları döndürür. Tarih damgasıyla çalıştığım ama DateTime formatını kullanmadığım problemi neden zaman damgası olduğunu düşünüyorum. Bu neden oluyor?

+0

"log_date" için veri türü nedir? – Kermit

cevap

14

log_date, DateTime veri türünde olmalıdır. MySQL DATE işlevini kullanmak çok daha kolaydır. Bazı örnekler

SELECT * FROM log_table 
WHERE DATE(log_date) < '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) > '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) BETWEEN '2013-04-05' AND '2013-05-05' 

SELECT * FROM log_table 
WHERE DATE(log_date) BETWEEN DATE(CURRENT_DATE() - INTERVAL 2 WEEK) AND 
DATE(CURRENT_DATE() + INTERVAL 4 DAY) 
+0

Daha basit olabilir, ancak verimli değil. Bana nedenini söylersen seni + 1'leyeceğim. – Kermit

+1

tamam, hasta ateş :). WHERE tümcesinde dahili işlevlerle dizinleri kullanmak imkansız – blotto

+4

+1 ding ding ding – Kermit

0

Bununla ilgili deneyebilirsiniz ..

WHERE DATE_FORMAT(AUCTION_DATE, '%Y%m%d') >= DATE_FORMAT('2013/5/18', '%Y%m%d') 

Ayrıca() işlevi artık kullanarak bugün tarih alabilirsiniz.

+1

Bunu yapmamalısınız: 'DATE_FORMAT()' her bir satır için hesaplanır, sabit olmayan bir sınama yerine, DATE_FORMAT ('2013/5/18', '% Y% m% d ') 'dır. Yani daha iyi olur: W AUCTION_DATE NEREDE> = DATE_FORMAT ('2013/5/18', '% Y% m% d'), dizinleri kullanabilir. – Yvan

İlgili konular