2017-01-02 75 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