如何在mysql中按字母排序单词

时间:2013-12-13 07:21:53

标签: mysql sorting

我有一张这样的桌子......

 mytbl(names)values('ron'),('sam'),('john'),('tony')

现在,我希望看到names列中的单词,其中每个单词将按字母顺序按字母升序排序。我正在尝试更具体地阐明我的要求。

我想要这样

'ron'将被排序为'nor'

'sam'将被归类为'ams'

'john'将被排序为'hjno'

'tony'将被排序为'noty'

我希望确切地看到那些排序的值作为我的输出。我怎么能得到...我应该如何从表中选择以获得这样的输出?

请提前解决我的问题。谢谢。

1 个答案:

答案 0 :(得分:2)

你可以在一个计数器(数字)表的帮助下在纯SQL中执行此操作,您可以轻松地创建和填充此类

CREATE TABLE tally(n INT NOT NULL PRIMARY KEY);
INSERT INTO tally
SELECT a.N + b.N * 10 + 1 n
 FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n

现在查询

SELECT names, GROUP_CONCAT(letter ORDER BY letter SEPARATOR '') sorted_name
  FROM
(
  SELECT names, MID(names, n.n, 1) letter
    FROM mytbl e JOIN tally n
      ON n.n <= CHAR_LENGTH(names)
) q
 GROUP BY names

输出:

| NAMES | SORTED_NAME |
|-------|-------------|
|  john |        hjno |
|   ron |         nor |
|   sam |         ams |
|  tony |        noty |

这是 SQLFiddle 演示