2017-01-02 68 views
1
SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-01-2017' 

工作時,此查詢無法正常工作,但是當我做下面的查詢,那麼顯示結果SQL查詢之間無法正常

SELECT * FROM `incomes` WHERE incomeDate BETWEEN '28-12-2016' and '31-12-2016' 
+1

10 ...'incomeDate'列的數據類型是什麼?它被聲明爲'DATE'或'VARCHAR'嗎?請注意,格式爲dd-mm-yyyy的字符串文字是* not * canonical;字符串的比較從左到右逐個字符地進行。因此,兩個字符串文字之間的字符串值「* 29 -07-1999」將被置於*之間,但代表*日期*,日期不是。 – spencer7593

回答

2

請更改日期格式,在水平的研究MySQL支持「YYYY-MM-DD」日期甲。請使用下面的查詢。

SELECT * FROM incomes WHERE incomeDate BETWEEN '2016-12-28' and '2017-01-31'. 

希望這會對你有所幫助。

0

您正在比較日期列和(兩個)字符串文字。這裏發生的是將日期轉換爲字符串並按字典順序進行比較。相反,您應該明確地將字符串轉換爲日期,然後按日期順序進行比較:

SELECT * 
FROM incomes 
WHERE incomeDate BETWEEN STR_TO_DATE('28-12-2016', '%d-%m-%Y') AND 
          STR_TO_DATE('31-01-2017', '%d-%m-%Y') 
+0

嗯,它總是一個詞典對比! – Strawberry