如何从日期和时间范围内的数据在MySQL

问题描述:

MySQL表: -如何从日期和时间范围内的数据在MySQL

ID | From_DateTime  | To_DateTime 

1   2014-09-01 10:00:00 2014-09-10 22:00:00 

说明:

我加入数据库中的表2列日期和时间范围。上面显示的数据意味着从2014年9月1日至2014年10月9日是日期范围,并且从10:00:00到22:00:00是时间范围。

正场景 - 现在我传递2014年9月5日15:00:00我的查询其进入日期和时间这两个范围。我需要的是来自查询的ID。

负面情景 - 现在我传递2014年9月5日23:00:00我的查询其进入时间进入的范围,但时间不是在指定的范围内,所以我应该得到0的结果。

我不知道数据库查询,这就是为什么我张贴到这里来从数据库专家得到一些帮助。

+0

拆分它4列:2个日期和2倍,因为目前的架构并没有太大的意义。然后使用'DATE()'+'TIME()'函数进行比较。 – zerkms 2014-09-11 03:43:58

+0

使用这2列是不可能做匹配的?有4列而不是2是强制性的吗?如果是,我将它分成4列,请你帮助我构建查询。 – Scorpion 2014-09-11 04:04:09

+0

这是可能的,但没有多大意义。 'datetime'指向了确切的时间点,而你需要一个'date'和''time'',它们彼此不相关。 – zerkms 2014-09-11 04:06:12

像这样的东西应该工作。可能需要一些调整。

SELECT ID FROM (
    SELECT ID FROM <tablename> 
    WHERE DATE('<dateTimeValue>') BETWEEN DATE(From_DateTime) AND DATE(To_DateTime) 
    AND TIME('<dateTimeValue>') BETWEEN TIME(From_DateTime) AND TIME(To_DateTime) 
    UNION 
    SELECT 0 AS ID FROM DUAL 
) AS a LIMIT 1 
+0

如果我通过'2014-09-05 23:00:00',那么它也会返回不正确的行,我需要匹配日期和时间。 – Scorpion 2014-09-11 04:02:50

+0

陷阱,编辑上面。子句之间需要2个。 – 2014-09-11 04:05:57

+1

虽然这会让你放慢脚步。您应该采用上面的建议并创建4列From_Date,To_Date,From_Time,To_Time,以便它们可以被索引,并且不必在每个测试行上运行6个函数 – 2014-09-11 04:09:51

SELECT ID FROM date_time WHERE From_DateTime < '2014年9月5日15:00:00' AND To_DateTime> '2014年9月5日15:00:00';

这里date_time是表名...... 不要忘了把日期用单引号