【问题标题】:MySQL Date Format Convert Hour-Minute to Interval and Disregard Year-Month-DayMySQL日期格式将小时-分钟转换为间隔并忽略年-月-日
【发布时间】:2012-10-19 07:29:13
【问题描述】:

(对不起,我一开始以为是 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) 应用于前三列,后三列没有格式)

感谢您的帮助:

【问题讨论】:

  • 可能的解决方案:有没有办法替换时间戳上的年月日?

标签: mysql date date-format


【解决方案1】:

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

如果你在一天之内把所有事情都搞砸了,那就必须是这样的

WHere ((Start <= Stop) and ??)
Or
((Start > Stop) and ???)

【讨论】:

  • 今天很重要,因为明天应该更重要。真的没关系。 2000 年 1 月 1 日的日期无关紧要。只有时间很重要。编辑:实际上分钟也很重要。
  • 不能同意。保留日期会更容易,并且一旦您跨越午夜(如果您的范围超过 24 小时会发生什么?)不这样做的论点就在垃圾箱中。现在你正拼命拯救一个糟糕的设计。根据我的经验,这往往是一个非常糟糕的主意。您可以做的一件事是以分钟为单位的开始时间和持续时间。我学会了不要以更难的方式做这种事情。英国夏令时。开始时间 01:50,结束时间 03:00,持续时间 2:10、1:10 或 0:10,具体取决于当天...
猜你喜欢
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2023-02-08
  • 2021-04-12
相关资源
最近更新 更多