Mysql指定某個字符串字段前面幾位排序查詢方式
指定某個字符串字段前面幾位排序查詢
數據樣例
想要結果:
每個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的:
總結
好瞭,該篇到這裡吧~
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。