0

我有一个存储以下数据的 MySQL 表:

id_event INT(10)
start_date DATE()
end_date DATE()

我的目标是显示包含在日期之间的间隔之间的所有 id_events:$start$sto

到目前为止我已经尝试过:

SELECT * FROM events WHERE $start >= start_date AND $end <= end_date;

但问题是它可能是一些事件在 input 之前开始,在$start之后结束$end并且没有显示。

我很确定这可能很容易,但在过去的两天里我一直坚持

提前致谢

4

4 回答 4

0

尝试

SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end';

于 2013-07-22T21:54:19.607 回答
0

尝试这个:

SELECT * FROM events 
WHERE $start <= end_date and $end >= start_date;

在此处输入图像描述

于 2013-07-22T21:57:09.070 回答
0

这在很大程度上取决于 $start 和 $end 中的内容。我假设这来自 PHP,对吧?

我认为您需要首先使用 STR_TO_DATE 函数(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#将 PHP 变量中的任何内容转换为 SQL DATE 类型function_str-to-date )

然后,使用正确的格式后,您可以运行类似于以下内容的内容:

SELECT * FROM events WHERE STR_TO_DATE('$start','%d-%m-%Y') >= start_date AND STR_TO_DATE('$end','%d-%m-%Y')  <= end_date;
于 2013-07-22T21:57:57.327 回答
0

$start首先,您需要确保$end格式正确。它应该是:'YYYY-mm-dd',例如:'2013-07-22'

其次,你的逻辑有缺陷。 $start >= start_date是一样的start_date <= $start。这意味着输入为 的日期或之前$start的任何内容。

最后,您需要在查询中引用您的值,您的日期应该是字符串。

SELECT * FROM events WHERE start_date >= '$start' AND end_date <= '$end';
于 2013-07-22T21:56:15.333 回答