0

(抱歉,我一开始以为是 MySQL,把我的 DB 搞混了,同时在太多 DBMS 中工作)

我需要比较一天中开始时间和停止时间之间事件的中点。现在我正在将您在右侧看到的日期转换为 HH:MM 并且比较工作到午夜。

查询说: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) 应用于前三列,后三列没有格式)

谢谢你的帮助:

4

1 回答 1

1

那么这一天对你来说很重要吗?

鉴于您在一天之内完成了所有事情而把事情搞砸了,它必须是这样的

WHere ((Start <= Stop) and ??)
Or
((Start > Stop) and ???)
于 2012-10-29T23:05:54.400 回答