(抱歉,我最初认为这是MySQL,让我的数据库混淆了,同时在太多的DBMS中工作)
我需要比较事件在一天的开始和停止时间之间的中间点。现在我正在将您在右侧看到的日期转换为HH:MM并且比较工作直到午夜。
查询说:在pStart和pStop之间有一半BETWEEN。
如下所示,pStart和pStap有2000年1月1日的日期,这是因为年月日对我来说并不重要...
有效数据:
+-------+--------+-------+---------------------+---------------------+---------------------+
| half | pStart | pStop | half2 | pStart2 | pStop2 |
+-------+--------+-------+---------------------+---------------------+---------------------+
| 19:00 | 19:00 | 23:00 | 2012-11-04 19:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
| 20:00 | 19:00 | 23:00 | 2012-11-04 20:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
| 21:00 | 19:00 | 23:00 | 2012-11-04 21:00:00 | 2000-01-01 19:00:00 | 2000-01-01 23:00:00 |
| 23:00 | 20:00 | 23:00 | 2012-11-05 23:00:00 | 2000-01-01 20:00:00 | 2000-01-01 23:00:00 |
+-------+--------+-------+---------------------+---------------------+---------------------+
现在观察当pStop是午夜或更晚时会发生什么......
打破它的有效数据:
+-------+--------+-------+---------------------+---------------------+---------------------+
| half | pStart | pStop | half2 | pStart2 | pStop2 |
+-------+--------+-------+---------------------+---------------------+---------------------+
| 23:00 | 22:00 | 00:00 | 2012-11-04 23:00:00 | 2000-01-01 22:00:00 | 2000-01-01 00:00:00 |
| 23:30 | 23:00 | 02:00 | 2012-11-05 23:30:00 | 2000-01-01 23:00:00 | 2000-01-01 02:00:00 |
+-------+--------+-------+---------------------+---------------------+---------------------+
因此我的where子句转换为: 在22:00和00:00之间的19:00 ......返回false并且我错过了上面的两个正确的行。
问题:
有没有办法将这些日期显示为整数区间,以便说明BETWEEN pStart和pStop的一半是正确的?
我考虑在pStop小于pStart时添加24以使00:00变为24:00但是如果没有长字符串连接和数字转换,就不知道这么做的简单方法。这样可以解决问题,因为pStart pStop差异永远不会超过6小时。
注意:(查询要复杂得多。它有其他不相关的日期计算,但结果如上所示.DATE_FORMAT(%H:%i)应用于前三列,没有格式化为最后三列)
感谢您的帮助:
答案 0 :(得分:1)
鉴于你在一天内做了所有事情搞砸了它,它必须像
一样WHere ((Start <= Stop) and ??)
Or
((Start > Stop) and ???)