2015-05-07 20 views
0

如何兩個日期之間的時間戳恰好返回行爲什麼我不能兩個日期之間的時間戳返回行正確

這段代碼沒有返回01-04和07-05

之間所有的行等什麼就是這個問題,爲什麼它不能正常工作

,以及如何當我使用日期

格式像這樣2015年1月4日

選擇帶時間戳兩個日期之間行3210
SELECT d_send_items.si_id , 
    DATE_FORMAT(FROM_UNIXTIME(d_send_items.si_send_date), '%d-%m-%Y') 
FROM d_send_items WHERE 
    DATE_FORMAT(FROM_UNIXTIME(d_send_items.si_send_date), '%d-%m-%Y') BETWEEN '01-04-2015' AND '07-05-2015' 

回答

2

date_format返回一個字符串所以between使用比較找出值是否是你所提供介於兩者之間。

所以,除非你的日期格式類似於yyyy-mm-dd,between而不是按照你的預期工作。

例如,日期08-04-2015是兩個日期01-04-201507-05-201508-04-2015之間不是兩個字符串01-04-201507-05-2015之間,因爲最顯著部08超出終止於07...範圍。

所以你使用:

where 
    date_format(from_unixtime(d_send_items.si_send_date), '%Y-%m-%d') 
    between '2015-04-01' and '2015-05-07' 

但每行的功能從來沒有在關係數據庫中很好地擴展。

如果他們是正確的timestamp領域,我想你也可以繞過轉換和使用這樣的:

where d_send_items.si_send_date >= '01-04-2015' 
    and d_send_items.si_send_date < '08-05-2015' 

(注意,因爲08-05-2015< day following位的第二個條件是一樣的08-05-2015 00:00:00)假設MySQL會將這些日期格式識別爲dd-mm-yyyy

然而,即使它沒有做,你必須使用一些功能來將這些字符串轉換爲timestamp值,這一點是會做一次整個查詢,而不是(最有可能),每單行。

相關問題