【发布时间】:2021-09-02 23:10:06
【问题描述】:
我有一个表格,其中有 2 个日期列和 2 个时间列(到达日期、到达时间、出发日期、出发时间)
我想将 2 个日期字段合二为一,然后按日期、到达时间、出发时间排序。
所以我想要实现的是按顺序显示接下来x天的到达和离开。
从这里:
+--------------+--------------+----------------+----------------+--+
| arrival date | arrival time | departure date | departure time | |
+--------------+--------------+----------------+----------------+--+
| 20-06-21 | 06:00 | NULL | NULL | |
| 19-06-21 | 08:00 | 24-06-21 | 08:00 | |
| NULL | NULL | 20-06-21 | 08:00 | |
+--------------+--------------+----------------+----------------+--+
到这里:
+----------+--------------+----------------+
| date | arrival time | departure time |
+----------+--------------+----------------+
| 19-06-21 | 08:00 | NULL |
+----------+--------------+----------------+
| 20-06-21 | 06:00 | NULL |
+----------+--------------+----------------+
| 20-06-21 | NULL | 08:00 |
+----------+--------------+----------------+
| 24-06-21 | NULL | 08:00 |
+----------+--------------+----------------+
这是我现在的查询:
SELECT * FROM `bookings` WHERE STR_TO_DATE(`arrivalDate`, '%d-%m-%y') >= NOW()
AND STR_TO_DATE(`arrivalDate`, '%d-%m-%y') <= DATE(DATE_ADD(NOW(), INTERVAL +20 DAY))
OR STR_TO_DATE(`departureDate`, '%d-%m-%y') >= NOW() AND STR_TO_DATE(`departureDate`, '%d-%m-%y') <= DATE(DATE_ADD(NOW(), INTERVAL +20 DAY))
ORDER BY STR_TO_DATE(`arrivalDate`, '%d-%m-%y') asc,
STR_TO_DATE(`arrivalTime`, '%h:%i') asc,
STR_TO_DATE(`departureDate`, '%d-%m-%y') asc,
STR_TO_DATE(`departureTime`, '%h:%i') asc
【问题讨论】:
-
WHERE STR_TO_DATE(...性能极差