推荐系统|MySQL中如果对子串进行排序? 字符串和数值如何使用order by语句?

推荐系统|MySQL中如果对子串进行排序? 字符串和数值如何使用order by语句?


如果想要对值的子串进行排序(不管是字符串还是数值)都可以使用SUBSTR函数
要求1:想要获得最后两位的字母进行排序mysql> select * from test_db;+--------+------+------+------+| 英文名 | 姓名 | 年龄 | 工资 |+--------+------+------+------+| kell   | 小明 |   22 | 3800 || olee   | 小网 |   21 | 7774 || sake   | 小红 |   25 | 2226 || deoq   | 小省 |   27 | 6666 |+--------+------+------+------+
想要的结果按照英文名的后两位进行排序
+--------+------+------+------+| 英文名 | 姓名 | 年龄 | 工资 |+--------+------+------+------+| olee   | 小网 |   21 | 7774 || sake   | 小红 |   25 | 2226 || kell   | 小明 |   22 | 3800 || deoq   | 小省 |   27 | 6666 |+--------+------+------+------+
可以使用SUBSTR函数(截取字符串第一个参数是字符串第二个参数是起始位置)因为MySQL中和其他语言不一样的就是时从1开始算而其他语言则是从0开始算第一位下标所以其他语言的起始位置-1为最后一位而MySQL不减就是最后一位.
【推荐系统|MySQL中如果对子串进行排序? 字符串和数值如何使用order by语句?】下面这段代码也就是按照字符串最后2个字母进行排序
mysql> select substr(英文名length(英文名)-1) from test_db;+---------------------------------+| substr(英文名length(英文名)-1) |+---------------------------------+| ll                              || ee                              || ke                              || oq                              |+---------------------------------+4 rows in set (0.00 sec)
select 英文名姓名年龄工资  from test_db    order by substr(英文名length(英文名)-1);
要求2:按照工资的最后1位进行排序同样的数值也可以使用(其他语言如js中不可直接对数值类型使用)
+--------+------+------+------+| 英文名 | 姓名 | 年龄 | 工资 |+--------+------+------+------+| kell   | 小明 |   22 | 3800 || olee   | 小网 |   21 | 7774 || sake   | 小红 |   25 | 2226 || deoq   | 小省 |   27 | 6666 |+--------+------+------+------+
select 英文名姓名年龄工资  from test_db    order by substr(工资length(工资));