首頁 > 軟體

Mysql指定某個字串欄位前面幾位排序查詢方式

2023-03-17 06:00:23

指定某個字串欄位前面幾位排序查詢

資料樣例

想要結果: 

每個test_value 裡面都包含 ORDER 關鍵字, 想根據這個關鍵字 前面的數位進行排序。

第一步(想辦法先擷取到 ORDER關鍵字前面的 值)

使用SUBSTRING_INDEX 函數

sql :

SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

結果:

第二步,直接根據NO排序即可? (有坑)

sql :

select * FROM (

SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

)t  ORDER BY t.NO DESC 

結果並不是我們想要的:

原因,之前講過,字串型別對應mysql排序,它是這樣排的:

所以我們需要做轉換成數位再排 。

第三步轉換排序 

第一種方案 :

使用  CAST函數 轉換型別 

  • unsigned 表示無符號,不能表示小數
  • signed 表示有符號,可以表示小數
SELECT * FROM (

SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

)t  ORDER BY  CAST(t.NO AS SIGNED) 

結果OK的:

第二種方案

排序的字串欄位值後拼接 0 ,觸發轉換成數位

sql:

SELECT * FROM (

SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

)t  ORDER BY  t.NO+0

結果是OK的:

第三種方案:

CONVERT 函數 轉換型別

  • unsigned 表示無符號,不能表示小數
  • signed 表示有符號,可以表示小數

sql:

SELECT * FROM (

SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value  FROM  test

)t  ORDER BY  CONVERT(t.NO,SIGNED)

結果是OK的:

總結

好了,該篇到這裡吧~

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com