今天小编给大家分享一下Mysql怎么指定某个字符串字段前面几位排序查询的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面粉丝们和小编一起分析一哈吧.
想要结果:?
每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序.
使用SUBSTRING_INDEX 函数
sql :
SELECT?ID,SUBSTRING_INDEX(test_value,"ORDER",1)?AS?NO,?test_value?FROM?test
结果:
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 函数 转换类型
SELECT?*?FROM?( SELECT?ID,SUBSTRING_INDEX(test_value,"ORDER",1)?AS?NO,?test_value?FROM?test )t?ORDER?BY?CONVERT(t.NO,SIGNED)
以上就是土嘎嘎小编为大家整理的Mysql怎么指定某个字符串字段前面几位排序查询相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!