我有一张这样的桌子......
mytbl(names)values('ron'),('sam'),('john'),('tony')
现在,我希望看到names
列中的单词,其中每个单词将按字母顺序按字母升序排序。我正在尝试更具体地阐明我的要求。
我想要这样
'ron'将被排序为'nor'
'sam'将被归类为'ams'
'john'将被排序为'hjno'
'tony'将被排序为'noty'
我希望确切地看到那些排序的值作为我的输出。我怎么能得到...我应该如何从表中选择以获得这样的输出?
请提前解决我的问题。谢谢。
答案 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 演示