SQL Query无法正常工作

时间:2012-06-21 11:48:36

标签: php mysql sql

所以基本上我有一张桌子 -

ID | from | To

-----------------
1  | 25.05.2012|30.05.2012
-----------------
2  | 15.05.2012|20.05.2012
-----------------
3  | 25.06.2012|30.06.2012

我有一个查询

SELECT date.*
FROM table AS date
WHERE (date.from >= '25.05.2012' OR date.to >= '25.06.2012' )  AND (date.to <= '30.05.2012' OR date.from <= '25.05.2012' )
GROUP by date.id

但它不起作用,可能是什么问题?

5 个答案:

答案 0 :(得分:1)

您正在执行字符串比较,而不是日期比较,例如:26.05大于25.06,因为比较仅达到字符串的第二个字符并确定6大于5

为了执行日期比较,您需要将值存储为日期(首选)或以适当的字符串形式存储,例如yyyyMMdd

答案 1 :(得分:1)

date是MySQL中的保留关键字,尝试调用其他内容!

答案 2 :(得分:0)

SELECT * FROM table WHERE (from >= '25.05.2012' AND to <= '25.05.2012') GROUP by id;

答案 3 :(得分:0)

“date”是MySQL中的保留字符串。我建议将具有该名称的所有表和列重命名为自定义表。这可能已经解决了你的问题。

答案 4 :(得分:0)

第1点:表,日期,来自保留关键字。那些不应该用于命名表。如果您的表名是table,请使用反引号

第2点:如果您有一个表,为什么要为其创建别名?

第3点:比较日期的格式应为yyyy-mm-dd。我相信fromto列是时间戳。

第4点:由于您没有使用任何聚合函数,例如SUM, COUNT, etc

,目前不需要GROUP BY语句

您的查询应该是

SELECT *
FROM `table`
WHERE 
    (`from`>= '2012-05-25' OR `to`>= '2012-06-25' ) 
    AND
    (`to` <= '2012-05-30' OR `from` <= '2012-05-25');

如果您想将日期作为25.05.2012传递,请使用 STR_TO_DATE 功能将字符串转换为日期。