博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL order by 字符串的排序问题
阅读量:7002 次
发布时间:2019-06-27

本文共 1576 字,大约阅读时间需要 5 分钟。

hot3.png

一、创一个简单的表

CREATE TABLE `t_book` (  `ID` int(11) NOT NULL AUTO_INCREMENT,  `NAME` varchar(20) DEFAULT NULL,  `TYPE` varchar(255) DEFAULT NULL,  PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

二、往表里插入数据

INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('1', '1', 'A');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('2', '2', 'B');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('3', '3', 'C');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('4', '4', 'D');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('5', '5', 'E');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('6', '10', 'F');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('7', '11', 'G');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('8', '20', 'H');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('9', '21', 'I');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('10', '22', 'J');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('11', '23', 'K');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('12', '30', 'L');INSERT INTO `test`.`t_book` (`ID`, `NAME`, `TYPE`) VALUES ('13', '31', 'M');

三、遇见问题

SELECT * FROM t_book ORDER BY `NAME`;

使用ORDER BY NAME 作为条件后,得出如下结果:

恩?为什么不是我们要的结果集呢?

 

四、解决方案

1.使用“+0”的方式

SELECT * FROM t_book ORDER BY `NAME`+0;

这样,排序是正常了,但是呢,如果NAME这一列,有一行的数据是NULL的,那么再往下看,会出现这样的情况:

这样又感觉偏离了我们想要的排序,所以往下看第二种办法,保险一点的方法

 

2.使用“length(NAME)”方式

SELECT * FROM t_book ORDER BY LENGTH(`NAME`),`NAME`;

 

到这里就记录完了~

转载于:https://my.oschina.net/lsf930709/blog/786314

你可能感兴趣的文章