0

给定一组字母 {a,aa,b,bb,c,cc,bbb}

我想先按单个字母,然后是双字母,然后是三个字母来订购它们。在该结构中,我希望它们按字母顺序排列。

例子: a,b,c,aa,bb,cc,bbb

对于我的用例,它最多只能包含 3 个字母。有任何想法吗?

4

1 回答 1

2

对于您提供的数据,您可以只使用长度:

order by length(letters),
         letters;

这假设字母与问题中的描述相同,之后没有其他字母。

如果这些是前缀,蛮力方法将是:

order by ((substring(letters, 1, 1) = substring(letters, 2, 1)) +
          (substring(letters, 1, 1) = substring(letters, 3, 1)
         ), letters;

也就是说,将初始字符与接下来的两个字符进行比较。上面返回0,当第一个和第二个字符不同时;1,当第一个和第二个相同但第三个不同时;和2三个字符前缀。

于 2013-08-06T01:01:13.513 回答