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

7 mysql sql

我在mysql表中有一个列(varchar(255)),我们称之为"word".如何编写一个select查询,它返回此列中按字符串中的字符排序的值?

例如,如果其中一个记录中有"earth"字样,那么对于所有行,它应该返回"aehrt"等等.有没有办法在单个查询中执行此操作?

Mar*_*ker 5

可能非常低效,但不需要用户定义的功能:

SELECT GROUP_CONCAT(LETTER SEPARATOR '') AS ReOrderedLetters
  FROM ( SELECT 'A' as LETTER FROM <table> WHERE UPPER(`name`) like '%A%'
         UNION ALL
         SELECT 'B' as LETTER FROM <table> WHERE UPPER(`name`) like '%B%'
         UNION ALL
         SELECT 'C' as LETTER FROM <table> WHERE UPPER(`name`) like '%C%'
         UNION ALL
         SELECT 'D' as LETTER FROM <table> WHERE UPPER(`name`) like '%D%'
         ...
         UNION ALL
         SELECT 'Y' as LETTER FROM <table> WHERE UPPER(`name`) like '%Y%'
         UNION ALL
         SELECT 'Z' as LETTER FROM <table> WHERE UPPER(`name`) like '%Z%'
       ) alpha
Run Code Online (Sandbox Code Playgroud)

编辑

我不得不在睡觉前想出一个更好的选择,否则我永远不会睡觉; 所以这里是一个更清洁,更有效的替代方案.

我创建了一个名为letters的表,其中一列VARCHAR(1)称为letter; 然后用字母A到Z填充该表

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');
Run Code Online (Sandbox Code Playgroud)

然后:

select U.`name`,
       GROUP_CONCAT(L.`letter` 
           ORDER BY L.`letter` ASC 
          SEPARATOR '') AS ReOrderedLetters 
  FROM `users` U 
  LEFT JOIN `letters` L ON POSITION(L.`letter` IN UPPER(U.`name`)) > 0
 GROUP BY U.`name`
Run Code Online (Sandbox Code Playgroud)