- 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/
我尝试了多种方法来格式化/检索 DATETIME 函数的 TIME 部分,但没有成功。我在网上读到的所有内容都说 CURTIME() 将返回当前时间。确实如此,但也返回日期。我对日期不感兴趣,因为我填
我尝试过: `SELECT name FROM students WHERE time BETWEEN '16:20:00' AND '16:45:00' AND day =
我正在尝试使用 MySQL 进行时间检查,以查看当前时间是否介于 2 个给定时间戳之间。 我想做的是,如果设置的通知范围在 2 个给定时间戳之间,则生成一个通知列表。 因此,如果有人说在“18:00:
我有一个在 Linux 上从 php 文件运行的 sql 脚本,它总是返回比我们早 2 小时的时间。 Linux 盒子在本地运行,当我在 shell 中执行“日期”时,它会返回正确的时间。有什么想法为
我有一个带有 CURTIME() 值的列。我想要一个使用 CURTIME() 从列中选择分钟并将分钟复制到另一列的查询。 最佳答案 您可以使用minute功能。 如果您只是查询它: SELECT MI
我创建了一个包含此信息的 php.ini date.timezone="Asia/Riyadh" 但是当将 CURTIME() 插入数据库时,它会插入服务器时间而不是 php 中定义的时区,所以我
我有单元测试,我希望 CURTIME() 总是在同一时间返回,我能以某种方式做到这一点吗? 我可以设置时区: SET time_zone = 'America/New_York'; SELECT CU
我正在学习构建一个光伏电站监控网站。我的硬件每 10 秒向我的 SQL 服务器提供一次数据。现在,我必须以每 10 秒刷新一次其值的仪表形式表示这些记录的数据。但问题是,我无法在当前时间刷新我的值。
我对这个SELECT句子WHERE有问题: WHERE event.date >= CURDATE() AND event.hour >= CURTIME() 我想获取 MySQL 表中的下一个事件,
我有一个表 (flightSched),其中包含航类号、航类到达日期、是否到达或起飞,以及最重要的是它们的到达时间,如下所示。 +-------------+----------------+----
我网站的用户将能够创建事件。他们将分别设定日期和时间。该事件将保存到包含单独日期和时间列的 mysql 数据库中。 我想查询数据库以返回即将发生但未通过的事件。即事件日期是今天或将来,如果事件日期是今
SO 上有很多关于失败的准备语句的问题,但我找不到能解决我的确切问题(或至少解释它)的问题。 我正在尝试为我的用户提供一个有效期为 5 分钟的登录 token 。 当我通过 PHPMyAdmin 执行
显然我在尝试从我的数据库中选择时间时偶然发现了一个编码错误。 SELECT * FROM `videos` WHERE `added_time` > AddTime( CurTime(), '1440
我正在尝试从我的 MSSQL 数据库获取当前时间作为 unix 时间戳。 在 Mysql 中我可以这样说: SELECT id, caregiver_id,
如何通过添加 3 小时从服务器检索 CURTIME() 并将其显示在 PHP 页面中。提前致谢。 最佳答案 如果你愿意,可以让MySQL 处理时间运算 SELECT Time(Now()+Interv
如何在 MySQL 中插入 CURDATE() 和 CURTIME()? 我将它们分别插入到数据库表中的日期和时间字段中。 $query = "INSERT INTO `ordisp` (date,
我试图仅在时间介于 0 和 10 之间时进行选择。如果语句为真 => select1 else => select2。所以我认为它应该是这样的: if (SELECT HOUR(CURTIME())
我有一个大小为 N 的 arrayList,其中包含一个类,其中存储了基于 System millis 的时间。我想遍历整个 arrayList 并将其分成一小时的 block 。只能是从现在开始往前
将 CURDATE() 和 CURTIME() 更新到列中时,它会更新错误的时间和日期。我想将现有时区更改为 Asia/Kuala_Lumpur 这是我的更新脚本: $sql="UPDATE smss
在我的数据库中,当新用户注册时,我将 now() 用于 date_added 列(我需要准确的注册时间)。此外,我将用户 ip 存储在 ip 列中 现在我需要检查 SQL 是否已经有从今天开始的这个
我是一名优秀的程序员,十分优秀!