sql日期段交叉判断,交集
经验与学习 2016/11/4 11:56:52 点击:不统计
http://%77%77%77%2E%66%6F%72%61%73%70%2E%63%6E
在数据查询中遇到了 时间段交集情况查询,比如 表table 中 begintime 和endtime 我们要查询 [a,b] a开始时间 b 结束时间 在表中是否有交叉重叠。
表table
begintime enditime
2016-08-08 2016-08-10
2016-09-09 2016-10-09
判断时间为 [2016-08-09,2016-08-11] [2016-08-13,2016-08-15]
其实 看下图我们写sql就比较方便了
重叠 4 【----------------------------------】 就是开始时间和结束时间 包含了数据库字段时间
那么我们的sql语句即 为:
select count(*) as num from table where (begintime < a and endtime >a and endtime <b) or (begintime > a and endtime >b and beginttime <b) or (begintime <a and endtime >b) or (beginttime>a and b <endtime);
这样查询出来时间,如果num >0 则表示 有重叠,否则则没有重叠的的时间。
这样我们就查询出来时间交叉的数据。 上则是判断时间交叉的sql。
·上一篇:PHP编程效率的20个要点 >> ·下一篇:.gitkeep >>