我尝试了许多解决方案,LENGTH, CAST等。我似乎想不出一个可行的解决方案来按字母顺序排序,那么自然(1,2 ....)10、11)。任何帮助将非常感激!不是每个结果都有一个数字,有些只有一个数字,有些有两个数字。我可以按字母顺序排序,也可以按自然顺序从1到10排序,但我似乎无法同时做到这两点。
<表类>
名称
tbody><<tr>鱼1 鱼2 猫猫11 猫4 狗2 狗10 狗11 表类>
你的问题的一个简单的解决方案是分割你的数据,然后排序,当没有附加数字时,+ 0保证它是第一个。
相同名称的任何顺序通常都不可解
如果你也有字母,第二个参数必须是CASE WHEN
,这将进一步排序
CREATE TABLE tab1 (`name` varchar(7)) ; INSERT INTO tab1 (`name`) VALUES ('Fish 1'), ('Fish 2'), ('Cats'), ('Cats 11'), ('Cats 4'), ('Dogs 2'), ('Dogs 10'), ('Dogs 11') ;
SELECt name FROM tab1 ORDER BY SUBSTRING_INDEX(name,' ',1) ASC ,SUBSTRING_INDEX(name,' ',-1) + 0 ASC
| name ||:------ ||猫||猫4 |猫11 ||狗狗2 ||狗狗10 ||狗狗11 ||鱼1 || Fish 2 |
db<此处小提琴>此处小提琴>