如何从日期和时间范围内的数据在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的结果。
我不知道数据库查询,这就是为什么我张贴到这里来从数据库专家得到一些帮助。
像这样的东西应该工作。可能需要一些调整。
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
如果我通过'2014-09-05 23:00:00',那么它也会返回不正确的行,我需要匹配日期和时间。 – Scorpion 2014-09-11 04:02:50
陷阱,编辑上面。子句之间需要2个。 – 2014-09-11 04:05:57
虽然这会让你放慢脚步。您应该采用上面的建议并创建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
是表名...... 不要忘了把日期用单引号
拆分它4列:2个日期和2倍,因为目前的架构并没有太大的意义。然后使用'DATE()'+'TIME()'函数进行比较。 – zerkms 2014-09-11 03:43:58
使用这2列是不可能做匹配的?有4列而不是2是强制性的吗?如果是,我将它分成4列,请你帮助我构建查询。 – Scorpion 2014-09-11 04:04:09
这是可能的,但没有多大意义。 'datetime'指向了确切的时间点,而你需要一个'date'和''time'',它们彼此不相关。 – zerkms 2014-09-11 04:06:12