0

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

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

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

4

5 回答 5

1

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

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

于 2012-06-21T11:51:31.040 回答
1

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

于 2012-06-21T11:53:30.840 回答
0
SELECT * FROM table WHERE (from >= '25.05.2012' AND to <= '25.05.2012') GROUP by id;
于 2012-06-21T11:53:41.977 回答
0

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

于 2012-06-21T11:55:43.143 回答
0

第 1 点: table、date、from 是保留关键字。这些不应该用于命名表。如果您的表名是表,请使用反引号

第 2 点:当您有一张表时,为什么要为其创建别名?

第 3 点:比较日期时应采用yyyy-mm-dd. 我相信fromto是时间戳。

第 4 点:目前不需要 GROUP BY 语句,因为您没有使用任何聚合函数,例如SUM, COUNT, etc

您的查询应该是

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函数将字符串转换为日期。

于 2012-06-21T12:12:43.993 回答