(抱歉,我最初以为这是 MySQL,把我的数据库搞混了,同时在太多 DBMS 中工作)
我需要比较事件的开始时间和结束时间之间的中点。现在,我正在将您在右侧看到的日期转换为 HH:MM,并且比较将持续到午夜。
查询显示:WHERE half BETWEEN pStart 和 pStop。
如下所示,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 子句翻译为: WHERE 19:00 BETWEEN 22:00 AND 00:00 ...返回 false,我错过了上面的两行正确的行。
问题:
有没有办法将这些日期显示为整数间隔,以便 pStart 和 pStop 之间的一半是正确的?
我考虑过在 pStop 小于 pStart 时添加 24,以使 00:00 变成 24:00,但不知道在没有长字符串连接和数字转换的情况下实现这一点的简单方法。这将解决问题,因为 pStart pStop 差异永远不会超过 6 小时。
注意:(查询要复杂得多。它还有其他不相关的日期计算,但结果如上所示。DATE_FORMAT(%H:%i) 应用于前三列,后三列没有格式化)
感谢您的帮助:
最佳答案
那么这一天对你来说很重要吗?
考虑到你在一天内把所有事情都搞砸了,事情一定会是这样的
WHere ((Start <= Stop) and ??)
Or
((Start > Stop) and ???)
关于MySQL 日期格式将小时-分钟转换为间隔并忽略年-月-日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130852/