MySQL order by 字符串的排序問題

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`;

 

到這裏就記錄完了~

相關文章
相關標籤/搜索