1、创一个简单的表sql
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;
2、往表里插入数据code
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');
3、碰见问题排序
SELECT * FROM t_book ORDER BY `NAME`;
使用ORDER BY NAME 做为条件后,得出以下结果:class
恩?为何不是咱们要的结果集呢?test
4、解决方案方法
1.使用“+0”的方式im
SELECT * FROM t_book ORDER BY `NAME`+0;
这样,排序是正常了,可是呢,若是NAME这一列,有一行的数据是NULL的,那么再往下看,会出现这样的状况:数据
这样又感受偏离了咱们想要的排序,因此往下看第二种办法,保险一点的方法img
2.使用“length(NAME)”方式解决方案
SELECT * FROM t_book ORDER BY LENGTH(`NAME`),`NAME`;
到这里就记录完了~