我的convoys作業資料庫中有一個名為的列,我首先要對“不包含字母”的值進行排序,然后再對“包含字母”的值進行排序。
例如這里有幾個值
| 名稱 | 護航 |
|---|---|
| 工人1 | 1 |
| 工人2 | 3 |
| 工人3 | 米4 |
| 工人4 | M5 |
| 工人5 | 4 |
| 工人6 | 11 |
它應該像這樣對它們進行排序
| 名稱 | 護航 |
|---|---|
| 工人1 | 1 |
| 工人2 | 3 |
| 工人5 | 4 |
| 工人6 | 11 |
| 工人3 | 米4 |
| 工人4 | M5 |
有沒有人知道如何使這個查詢作業?
uj5u.com熱心網友回復:
我認為最直接的方法是以下(使用正則運算式):
SELECT name,
convoy
FROM TABLE_NAME
ORDER BY CASE WHEN convoy REGEXP '^[0-9] $' THEN convoy ELSE convoy END
uj5u.com熱心網友回復:
按從非數字或空格字符組合的第一個標記排序,然后按從數字組合的第一個標記(并轉換為 UNSIGNED)。
請注意,此解決方案還可以正確排序字串,例如“M13”(位于“M 4”和“M5”之后)
select *
from t
order by regexp_substr(convoy, '[^\\d\\s] ')
,cast(regexp_substr(convoy, '\\d ') as UNSIGNED)
小提琴
uj5u.com熱心網友回復:
最大無符號整數:4294967295
MySQL 5.6
此 SQL 將“不包含字母”的值排序為數字,然后是其他值。
select
name,
convoy
from Table1
order by
case when
convoy REGEXP '^[0-9] $'
then convert(convoy, UNSIGNED INTEGER)
else 4294967295
end,
convoy
;
或者可能更好:
select
*
from Table1
order by
case when
convoy REGEXP '^[0-9] $'
then LPAD(convert(convoy, UNSIGNED INTEGER),10,0)
else convoy
end
;
DDL:
CREATE TABLE Table1
(`name` varchar(7), `convoy` varchar(3))
;
INSERT INTO Table1
(`name`, `convoy`)
VALUES
('worker1', '1'),
('worker2', '3'),
('worker3', 'M 4'),
('worker4', 'M5'),
('worker5', '4'),
('worker6', '11')
;
輸出:
| 名稱 | 護航 |
|---|---|
| 工人1 | 1 |
| 工人2 | 3 |
| 工人5 | 4 |
| 工人6 | 11 |
| 工人3 | 米4 |
| 工人4 | M5 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420921.html
標籤:
上一篇:如何將mysql復制用戶的新密碼更新為從屬主機。資訊檔案
下一篇:未提交報告的串列
