簡體   English   中英

MySQL中多行排序時間

[英]Sort time in MySQL with multiple rows

介紹

我在MySQL中有一張總線表,每條總線都有一些到達時間。 我需要按先到先到的順序對公共汽車進行分類。

未分類表

+-------+-------------------------------+
|  bus  |             time              |
+-------+-------------------------------+
| Bus A | 8 a.m.<br/>9 a.m.             |
| Bus B | 12 p.m.<br/>1 p.m.<br/>2 p.m. |
| Bus C | 10 a.m.                       |
| Bus D | 9:30 a.m.                     |
+-------+-------------------------------+

排序(錯誤)

+-------+-------------------------------+
|  bus  |             time              |
+-------+-------------------------------+
| Bus C | 10 a.m.                       |
| Bus B | 12 p.m.<br/>1 p.m.<br/>2 p.m. |
| Bus A | 8 a.m.<br/>9 a.m.             |
| Bus D | 9:30 a.m.                     |
+-------+-------------------------------+

排序(正確)

+-------+-------------------------------+
|  bus  |             time              |
+-------+-------------------------------+
| Bus A | 8 a.m.<br/>9 a.m.             |
| Bus D | 9:30 a.m.                     |
| Bus C | 10 a.m.                       |
| Bus B | 12 p.m.<br/>1 p.m.<br/>2 p.m. |
+-------+-------------------------------+

詢問

我嘗試使用此答案 ,但似乎無法正常工作。 這可能是由於格式問題-“ 2:00 AM”與“ 2:00 AM”。

SELECT bus_timing
FROM buses
ORDER BY STR_TO_DATE(bus_timing, '%l:%i %p')

因此,如何在不更改數據的情況下根據時間對這些數據進行排序?

STR_TO_DATE格式和方法看起來不錯。 因此,數據可能是問題所在。

這個

ORDER BY STR_TO_DATE(REPLACE(UCASE(bus_timing),'.',''), '%l:%i %p')

將刪除ampm並將其更改為大寫,這將更符合預期的%p格式

如果您可以通過這種方式設置日期的格式,而不是早上8 00,而不是早上8,

select STR_TO_DATE( substr('8 30 am<br/>9 a.m. ', 1, 
              LOCATE('<br/>','8 30 am<br/>9 a.m. ') -1), '%l%i %p');

您應該只獲取第一個值的時間並為此排序

使用substring_index()將字符串分開並獲取第一個元素。 然后按第一個元素排序。

所以:

order by str_to_date(substring_index(time, '<', 1), '%l:%i %p')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM