我正在嘗試根據列值對 MySQL 表資料進行排序。
| ID | 記錄編號 | created_at | 更新時間 |
|---|---|---|---|
| 1 | 2022 年 4 月 4 日 | 2022-10-24 20:34:25 | 2022-10-24 20:34:25 |
| 3 | ent/6/2021 | 2022-10-24 20:35:03 | 2022-10-24 20:35:03 |
該列被命名record_number并且列的值遵循格式ent/4/2022,其中ent在所有條目中是通用的并且4是記錄號并且2022是創建記錄的年份。
如何對 MySQL 查詢中的記錄進行排序,以便在按升序顯示排序結果時顯示ent/6/2021之前的條目?ent/4/2022
按降序排列的排序結果應該是這樣的。
| ID | 記錄編號 | created_at | 更新時間 |
|---|---|---|---|
| 1 | 2022 年 4 月 4 日 | 2022-10-24 20:34:25 | 2022-10-24 20:34:25 |
| 3 | ent/6/2021 | 2022-10-24 20:35:03 | 2022-10-24 20:35:03 |
這意味著記錄id=與帶有=的記錄1相比更新,因為它是在 2021 年創建的,而后者是在 2022 年創建的。id3
uj5u.com熱心網友回復:
ORDER BY
1*RIGHT(record_number, 4), /* extracts the year (assumes a 4-digit year) */
1*SUBSTR( SUBSTRING_INDEX(record_number, '/', 2), 5 ) /* extracts record number */
1*將提取的字串轉換為INT,以便可以按數字而不是按字母順序對它們進行排序。
如果年份不總是 4 位數,請使用:
ORDER BY
1*RIGHT(record_number, LOCATE('/', REVERSE(record_number))-1),
1*SUBSTR( SUBSTRING_INDEX(record_number, '/', 2), 5 )
MYSQL:查找字串中字符的最后一次出現
uj5u.com熱心網友回復:
單程:
select *
from test
order by SUBSTRING_INDEX(SUBSTRING_INDEX(record_number,'/',-2),'/', 1) *1 asc,
str_to_date(replace(record_number,'ent','00'),'%d/%m/%Y') desc;
https://dbfiddle.uk/nUOCNgy_ _
首先您需要禁用NO_ZERO_DATE然后將 ent 替換為 00 并使用 str_to_date 形成一個日期列。
該行將SUBSTRING_INDEX(SUBSTRING_INDEX(record_number,'/',-2),'/', 1) *1 asc僅獲取之間的字符/ /并將其轉換為數字
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/520394.html
標籤:mysql数据库
上一篇:我的密碼輸入欄位中有奇怪的小空間
