开发者

Mysql指定某个字符串字段前面几位排序查询方式

开发者 https://www.devze.com 2023-03-17 09:03 出处:网络 作者: 小目标青年
目录指定某个字符串字段前面几位排序查询数据样例第一步(想办法先截取到 ORDER关键字前面的 值)第二步,直接根据NO排序即可? (有坑)第三步转换排序 总结指定某个字符串字段前面几位排序查询
目录
  • 指定某个字符串字段前面几位排序查询
    • 数据样例
    • 第一步(想办法先截取到 ORDER关键字前面的 值)
    • 第二步,直接根据NO排序即可? (有坑)
    • 第三步转换排序 
  • 总结

    指定某个字符串字段前面几位排序查询

    数据样例

    Mysql指定某个字符串字段前面几位排序查询方式

    想要结果: 

    每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序。

    第一步(想办法先截取到 ORDER关键字前面的 值)

    使用SUBSTRING_INDEX 函数

    sql :

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

    结果编程客栈

    Mysql指定某个字符串字段前面几位排序查询方式

    第二步,直接根据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指定某个字符串字段前面几位排序查询方式

    原因,之前讲过,字符串类型对应mysql排序,它是这样排的:

    Mysql指定某个字符串字段前面几位排序查询方式

    所以我们需要做转换成数字再排 。

    第三步转换排序 

    第一种方案 :

    使用  CAST函数 转换类型 

    • unsigned 表示无符号,不能表示小数
    • signed 表示有符号,可以表示小数
    SELECT * FROM (
    
    SELECT ID,SUBSTRING_INDEX(tesjavasc开发者_SQLiteriptt_value,"ORDER",1) AS NO, test_value FROM test
    
    )t ORDER BY CAST(t.NO AS SIGNED)

    结果OK的:

    Mysql指定某个字符串字段前面几位排序查询方式

    第二种方案

    排序的字符串字段值后拼接 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的:

    Mysql指定某个字符串字段前面几位排序查询方式

    第三种方案:

    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.Nhttp://www.devze.comO,SIGNED)

    结果是OK的:

    Mysql指定某个字符串字段前面几位排序查询方式

    总结

    好了,该篇到这里吧~

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号