首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL按日期和时间4个字段排序

MySQL按日期和时间4个字段排序
EN

Stack Overflow用户
提问于 2021-06-18 15:49:15
回答 1查看 27关注 0票数 1

我有一个表,其中有两个日期列和两个时间列(到达日期,到达时间,出发日期,出发时间)

我想把两个日期字段组合在一起,然后按日期,到达时间,出发时间排序。

所以我想要实现的是按顺序显示接下来的x天的到达和离开。

从这个开始:

代码语言:javascript
复制
+--------------+--------------+----------------+----------------+--+
| 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          |  |
+--------------+--------------+----------------+----------------+--+

要这样做:

代码语言:javascript
复制
+----------+--------------+----------------+
| 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          |
+----------+--------------+----------------+

这是我现在的问题:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-18 15:55:44

您首先需要将到达和离开时间拆分为两行(例如,在您的数据中,这3行变成了4行)。只有这样,您才能对它们进行排序:

代码语言:javascript
复制
SELECT *
FROM (
    SELECT arrivalDate AS date, arrivalTime, NULL AS departureTime
    FROM t
    WHERE arrivalDate IS NOT NULL

    UNION ALL

    SELECT departureDate, NULL, departureTime
    FROM t
    WHERE departureDate IS NOT NULL
) AS sq1
ORDER BY date, COALESCE(arrivalTime, departureTime)

在上面的示例中,您必须用STR_TO_DATE(...)替换日期字符串。

Demo on db<>fiddle

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68031333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档