问题描述

工程实践2中遇到的问题。数据库中设计表的时候,有时候为了满足需求,某些字段的值是中英文与数字混合的,当需要查询这种字段并且排序时,直接使用“order by 某个字段”,得到的结果不是我们想要的,具体看例子。

设计:字段userid,类型为varchar,大小为10,格式为OAxxx,其中OA代表运营账号,xxx代表具体的编号。

需求:查询所有的运营账号,并且按照编号从小到大排序

test.sql

DROP DATABASE IF EXISTS test;

CREATE DATABASE test;

USE test;

DROP TABLE IF EXISTS oat;

CREATE TABLE OAT (

userid VARCHAR (10) NOT NULL,

PRIMARY KEY (userid)

) ENGINE = INNODB DEFAULT CHARSET = utf8;

INSERT INTO OAT VALUES('OA2'),('OA13'),('OA0'),('OA11'),('OA10'),('OA9');

SELECT * FROM OAT ORDER BY userid ASC;

查询结果如下

而我们期望的结果应该是

0

10

11

13

2

9

观察上面得出的结果,字段userid是字符串,字符串排序一般是按照ASCII码表来排的。在ASCII表中,前两位都是OA比较结果相等,比较下一位(第3位)的结果:0、1、2、9。如果第3位还相等(10,11,13),则继续比较下一位。

解决方案

实际上我们只比较第3位及以后(直到末尾)的数字大小,所以思路可以是将这些字符从原字符串中截取出来,然后转成数字再比较。

SELECT * FROM OAT ORDER BY SUBSTR(userid, 3) + 0 ASC;

查询结果如下

解释

先说一下这个+0,其实跟JAVA中的+""类似。JAVA中的变量+""是把变量转成字符串(或者字符串拼接),MySQL中的+0是转成数值类型。

SUBSTR语法:

SUBSTR (str, pos, len)

说明:str为列名/字符串;pos为起始位置;需要注意的是,MySQL中的起始位置pos是从1开始的;

如果pos为正数,就表示从正数的位置往下截取字符串(起始坐标从1开始),反之如果起始位置pos为负数,那么表示就从倒数第几个开始截取;len为截取字符个数/长度。

SUBSTR (str, pos)

说明:截取从pos位置开始到最后的所有str字符串

mysql key value 排序_MySQL按字符串中部分数值排序相关推荐

  1. java 对字符串中的数值排序

    对"34 9 -7 12 67 25"这个字符串中的数值从小到大排序! 介绍几个快捷键:for+"alt+/"快速写一个for循环     选中某一个小写单词 ...

  2. mysql筛选英文字符_MySQL:字符串中的数字、英文字符、汉字提取

    在进行字符串处理时,常常需要提取其中某一类型的字符,有时候需要提取其中的数字,有时需要提取其中的英文字符,而有时候则需要提取其中的中文字符. 这里利用正则匹配,实现了该功能. 废话少说,直接上码:DE ...

  3. Java黑皮书课后题第7章:**7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串。编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串

    **7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串.编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串 题目 题目描述 破题 代码 运行实例 题目 题目描 ...

  4. java基础—对一个字符串中的数值进行从小到大的排序

    对一个字符串中的数值进行从小到大的排序 例如: String s = "8 96 88 58 44 52 12 13 39 96 6"; public class SortIntT ...

  5. java字符排序_Java实现对字符串中的数值进行排序操作示例

    本文实例讲述了Java实现对字符串中的数值进行排序操作.分享给大家供大家参考,具体如下: 问题: 对"34 9 -7 12 67 25"这个字符串中的数值从小到大排序! 解决方法: ...

  6. Java学习案例:字符串中的数据排序

    案例:字符串中的数据排序 需求:有一个字符串:"91 27 46 38 50",请写程序实现最终输出结果是:"27 38 46 50 91" 思路: 1.定义一 ...

  7. java提取字符串中的数字并升序排序_java小练习,将字符串中的数值进行升序排序...

    问题引出:正常情况下用int数组可以直接用sort()方法排序,但是字符串不能. 思路:将字符串变成字符串数组,字符串数组变成int数组,再进行排序,排序后再变成字符串 将字符串中的数值从小到大排序 ...

  8. java实现字符串中的字母排序

    java实现字符串中的字母排序 题目要求: java实现字符串中的字母排序并输出排序后的结果 分析: 1.创建一个字符串,赋值并将字符逐个存进数组中. String str = "chenu ...

  9. python面试题-输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母

    题目: 输入一个由n个大小写字母组成的字符,按Ascii码值从小到大排序,查找字符串中第k个最小Ascii码值的字母(k>=1) 输入要求: 第一行输入大小写组成的字符串 第二行输入k, k必须 ...

最新文章

  1. MyBatis传入多个参数的问题
  2. 爬虫五 Beautifulsoup模块详细
  3. javaScript 验证码代码
  4. WatchOS系统开发大全(1)-AppleWatch背景介绍
  5. Chrome调试angularJS出现Uncaught SyntaxError: Unexpected identifier
  6. 漫画:7种编程语言的学习曲线
  7. 剑指offer python版 数组中只出现一次的两个数字
  8. 在Spring Boot 项目中使用Spring AOP实现切面日志
  9. 常用的C#正则表达式! [转]
  10. 整理综合布线系统中材料用量的计算公式
  11. JSK-118 输出格式练习【入门】
  12. 21秋期末考试电子商务概论10250k2
  13. zookeeper服务端
  14. 人一生的8种朋友(看看身边的朋友属于哪种)
  15. 图文左右滚动代码php,jQuery幻灯片左右滚动效果
  16. 风尚云网学习篇-介绍chrome 浏览器的几个版本
  17. python系列之:YAML语法总结
  18. 9V降压5V低功耗恒压稳压芯片,大电流3A方案和LDO
  19. HTML在列表中加图片,HTML + JS 列表显示图片
  20. Go语言核心之美 2.5-字符串

热门文章

  1. 服务器能做镜像文件吗,如何给服务器做镜像
  2. 从资深遥控器在家工作的5个技巧
  3. 想唱你就唱卡拉ok_如何将电唱机与其他设备连接起来
  4. 查期刊是否开源_新期刊HardwareX促进科学的开源硬件
  5. 把冰卖给爱斯基摩人_爱斯基摩人使用冰屋应用程序来节省资源
  6. 必知必会 | 关于Redis缓存这三大问题,必知必会
  7. Generator函数的基本概念
  8. 2017年春季计算机试题,【2017年整理】计算机试题.doc
  9. java 正则提取大于等于号_Java正则表达式
  10. e - 数据结构实验之查找五:平方之哈希表_leetcode算法之哈希表