2011-12-17 93 views
0

我有我的mysql数据库:检查范围的日期在MySQL

id | text | date_start   | date_stop 
1 | aa | 2011-12-17 10:45:00 | 2011-12-18 15:33:00 
2 | aa | 2011-12-18 19:11:44 | 2011-12-20 10:10:19 
3 | aa | 2011-12-21 15:14:00 | 2011-12-23 11:21:00 

,我想检查是否例如日期是在数据库中。 例如我即时给予:

date_start: 2011-12-17 11:11:11 and date_stop 2011-12-18 16:11:11 

这应该返回false。

date_start: 2011-12-20 11:11:11 and date_stop 2011-12-21 11:11:11 

这应该返回true。

我该怎么做?哪些查询应该用于SQL?

+0

你能解释一下你试图完成什么吗?我不明白为什么第一个例子应该返回false,第二个例子返回true。清楚地解释你想要做什么和你尝试过什么会增加有用答案的机会! – 2011-12-17 16:28:01

+0

我想检查这个日期 - 这是不是保留在数据库中 – 2011-12-17 16:31:18

+0

你能否解释*为什么*第二个例子应该返回true?我正在看你的桌子(没有命名),我只是没有得到它。 – Aaron 2011-12-17 16:34:52

回答

3
WHERE start_date BETWEEN $start AND $end 
OR end_date BETWEEN $start AND $end 
OR ($start < start_date AND $end > end_date) 

,如果你有一个结果,它的虚假,否则返回true。

-1

不知道这是你的意思,但是:

$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 
mysql_select_db("database", $link); 

$result = mysql_query("SELECT * FROM table WHERE date_start = '2011-12-17 11:11:11' AND date_stop = '2011-12-18 16:11:11'", $link); 
$amount = mysql_num_rows($result); 

if($amount > 0) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 
+0

他想知道范围是否与数据库中的任何范围重叠。 – dqhendricks 2011-12-17 16:35:41

1

试试这个:

SELECT COUNT(*)>0 FROM tbl WHERE date_start BETWEEN '2011-12-20 11:11:11' AND '2011-12-21 11:11:11' 

我想这date_start应给予日期之间。

+0

日期开始可能不在任何范围之间,而范围仍然重叠。将不得不检查开始日期和结束日期 – dqhendricks 2011-12-18 01:39:21