在MySQL中对字符串字符进行排序

一、需求

  • 对表中某个字段里的内容排序

  • 真实场景

  • 一个user表,表结构
    image.png

  • 表数据:
    image.png

要求对name字段的内容排序,比如 AB->AB、DA->AD、CB->BC
实现效果如下图;
image.png

二、方案

  • 新建一个letters表插入并插入数据
CREATE TABLE IF NOT EXISTS `letters` (
   `letter` varchar(1) NOT NULL,
   PRIMARY KEY (`letter`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `letters` (`letter`) VALUES
('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),
('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z');
  • 执行如下sql进行关联查询即可得到我们想要的结果
select U.id,U.`name`,
       GROUP_CONCAT(L.`letter` 
           ORDER BY L.`letter` ASC 
          SEPARATOR '') AS ReOrderedLetters 
 FROM `user` U 
  LEFT JOIN `letters` L ON POSITION(L.`letter` IN UPPER(U.`name`)) > 0
 GROUP BY U.`name`
 ORDER BY U.id

image.png

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×