[英]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')
將刪除am
和pm
並將其更改為大寫,這將更符合預期的%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.