- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个表 (flightSched),其中包含航类号、航类到达日期、是否到达或起飞,以及最重要的是它们的到达时间,如下所示。
+-------------+----------------+-----------------+-----------------+
| FlightNo | don | depOrArriv | arrivalTime |
+-------------+----------------+-----------------+-----------------+
| ET821 | Daily | Arrival | 19:45:24 |
| MS838 | Tuesday | Arrival | 00:05:24 |
| H7361 | Tuesday | Arrival | 23:15:06 |
+-------------+----------------+-----------------+-----------------+
我想在表格中显示当前时间和当前时间之前四个小时之间的所有航类。
在我的查询下方查找
SELECT *
FROM flightSched
WHERE `arrivalTime`
BETWEEN CURTIME()
AND ADDTIME( CURTIME() , '04:00:00' )
ORDER BY arrivalTime ASC
LIMIT 0 , 30
该查询可以完美运行,直到航类在午夜之后到达/起飞。根据上表,如果当前时间为 21:00:00,则不会显示航类号 MS838。我哪里出错了?
任何人都可以指出我的查询出了问题吗?
最佳答案
我相信这是因为 ADDTIME
没有按照您的想法进行,请看以下示例:
mysql> SELECT ADDTIME( '19:59:59' , '04:00:00' );
+-------------------------------------+
| ADDTIME( '19:59:59' , '04:00:00' ) |
+-------------------------------------+
| 23:59:59 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDTIME( '20:00:01' , '04:00:00' );
+-------------------------------------+
| ADDTIME( '20:00:01' , '04:00:00' ) |
+-------------------------------------+
| 24:00:01 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql>
一个可能的解决方案是将查询 WHERE
子句更改为使用 TIMEDIFF
,然后确保差异在特定范围之间。
如果我们采用一些时间示例值并将 TIMEDIFF
结果与中午进行比较,我们会得到以下结果:
+----------+---------------------------------+
| time | TIMEDIFF(MAKETIME(12,0,0),time) |
+----------+---------------------------------+
| 01:00:00 | 11:00:00 |
| 03:00:00 | 09:00:00 |
| 05:00:00 | 07:00:00 |
| 07:00:00 | 05:00:00 |
| 11:00:00 | 01:00:00 |
| 13:00:00 | -01:00:00 |
| 15:00:00 | -03:00:00 |
| 17:00:00 | -05:00:00 |
| 19:00:00 | -07:00:00 |
| 21:00:00 | -09:00:00 |
| 23:00:00 | -11:00:00 |
+----------+---------------------------------+
future 的时间会导致负时间差(按所示顺序提供参数),因此对于尚未回绕的时间,我们知道 -00:00:00 和 -04:00 之间的任何范围:00 是可以接受的(基于您提前 0 - 4 小时的更新。
因此,要检查正常的无包装时间,以下应该有效:
TIMEDIFF( CURTIME() , arrivalTime
) 在 MAKETIME(-4,0,0) 和 MAKETIME(0,0,0) 之间
如果我们检查确实换行的值:
+----------+----------------------------------+
| time | TIMEDIFF(MAKETIME(23,30,0),time) |
+----------+----------------------------------+
| 01:00:00 | 22:30:00 |
| 03:00:00 | 20:30:00 |
| 05:00:00 | 18:30:00 |
| 07:00:00 | 16:30:00 |
| 11:00:00 | 12:30:00 |
| 13:00:00 | 10:30:00 |
| 15:00:00 | 08:30:00 |
| 17:00:00 | 06:30:00 |
| 19:00:00 | 04:30:00 |
| 21:00:00 | 02:30:00 |
| 23:00:00 | 00:30:00 |
+----------+----------------------------------+
我们发现超过 20 小时的值应该是可以接受的。
OR TIMEDIFF( CURTIME() , `arrivalTime` ) > MAKETIME(20,0,0)
随着要求更改为 30m 到 4h 时差,也许值得完全改变方法,将整个时间戳转换为午夜过后的秒数,然后比较差异,以一天中的秒数为模并检查结果的。
关于php - 使用 MySQL CURTIME() 和 ADDTIME() 如何应对午夜转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19818945/
本文分享自华为云社区《【沃土方案--金融】银丰新融-反洗钱自主监测系统(一)》,作者:HuaweiCloudDeveloper 。 “三反(反洗钱、反恐怖融资、反逃税)”意见持续深化落实,第四轮互评估
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我们有一个数据驱动的 Activity ,它构建了一大组(通常最多 100 个)类似按钮的组件,并将它们放在一个 Scrollable 中。每个按钮都是从资源中膨胀的,并且基于 RelativeLay
我在一个非常早期的项目中使用 Hibernate EntityManager 和 Hibernate Annotations for ORM。该项目需要尽快启动,但规范不断变化,我担心系统将启动并收集
这是一个来自 SPOJ 的简单编程问题:http://www.spoj.com/problems/PROBTRES/ . 基本上,您需要输出 i 和 j 之间数字的最大 Collatz 循环。 (
由于 C++11 引入了新的统一初始化语法,许多人建议使用它来代替旧式语法。至少,如果不是这个所谓的极端情况: struct Foo { Foo(int){ std::cout
Log4J2漏洞涉及的影响太广了,昨天发文后很多粉丝留言问Spring Boot项目是否受到Log4J2漏洞影响。Spring官方已经全面进行了排查,现在大家可以知道这些信息和应对方法。 默认
我正在通过 UDP(视频数据)接收 RTP。 RTP 包含我需要解码的 H264。不幸的是,大多数 RTP 都包含零散的数据。由于缺少 RTP 序列,我无法正确重建 H264。 关于如何减少数据丢失以
我正在阅读 this thread并在解决方案中注意到,如果您发送的数据长度与实际数据分开,Nagle 的算法可能会播放和取消同步发送的数据。 我想知道这一点,因为我看到很多代码示例,客户端首先发送数
我正在创建一个简单的应用程序,它将使用react-native-firebase和react-native-maps。按照安装文档的说明,我已经启动并运行了 map ,没有任何问题。接下来,我已经安装
我是一名优秀的程序员,十分优秀!