Mysql指定某個字符串字段前面幾位排序查詢方式
指定某個字符串字段前面幾位排序查詢
數(shù)據(jù)樣例
想要結(jié)果:
每個test_value 里面都包含 ORDER 關(guān)鍵字, 想根據(jù)這個關(guān)鍵字 前面的數(shù)字進行排序。
第一步(想辦法先截取到 ORDER關(guān)鍵字前面的 值)
使用SUBSTRING_INDEX 函數(shù)
sql :
SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value ?FROM ?test
結(jié)果:
第二步,直接根據(jù)NO排序即可? (有坑)
sql :
select * FROM ( SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value ?FROM ?test )t ?ORDER BY t.NO DESC?
結(jié)果并不是我們想要的:
原因,之前講過,字符串類型對應(yīng)mysql排序,它是這樣排的:
所以我們需要做轉(zhuǎn)換成數(shù)字再排 。
第三步轉(zhuǎn)換排序
第一種方案 :
使用 CAST函數(shù) 轉(zhuǎn)換類型
unsigned
表示無符號,不能表示小數(shù)signed
表示有符號,可以表示小數(shù)
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value ?FROM ?test )t ?ORDER BY ?CAST(t.NO AS SIGNED)?
結(jié)果OK的:
第二種方案
排序的字符串字段值后拼接 0 ,觸發(fā)轉(zhuǎn)換成數(shù)字
sql:
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value ?FROM ?test )t ?ORDER BY ?t.NO+0
結(jié)果是OK的:
第三種方案:
CONVERT 函數(shù) 轉(zhuǎn)換類型
unsigned
表示無符號,不能表示小數(shù)signed
表示有符號,可以表示小數(shù)
sql:
SELECT * FROM ( SELECT ID,SUBSTRING_INDEX(test_value,"ORDER",1) AS NO, test_value ?FROM ?test )t ?ORDER BY ?CONVERT(t.NO,SIGNED)
結(jié)果是OK的:
總結(jié)
好了,該篇到這里吧~
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
select?into?from和insert?into?select的使用舉例詳解
select into from和insert into select都是用來復(fù)制表,下面這篇文章主要給大家介紹了關(guān)于select?into?from和insert?into?select使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04mysql創(chuàng)建表分區(qū)的實現(xiàn)示例
表分區(qū)是指根據(jù)一定規(guī)則,將數(shù)據(jù)庫中的一張表分解成多個更小的,容易管理的部分,本文主要介紹了mysql創(chuàng)建表分區(qū)的實現(xiàn)示例,感興趣的可以了解一下2024-01-01詳解MySQL存儲過程的創(chuàng)建和調(diào)用
這篇文章主要為大家介紹了MySQL存儲過程的創(chuàng)建和調(diào)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12MySQL 原理與優(yōu)化之Update 優(yōu)化
這篇文章主要介紹了MySQL 原理與優(yōu)化之Update 優(yōu)化,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-08-08