Mysql 当我的列字符串包含字母时,如何使用像列int这样的按列字符串排序?
我有一张像这样的桌子:Mysql 当我的列字符串包含字母时,如何使用像列int这样的按列字符串排序?,mysql,sql,Mysql,Sql,我有一张像这样的桌子: ------------------ | ID | Animal | ------------------ | 1 | B1 | ------------------ | 2 | B2 | ------------------ | 3 | B3 | ------------------ | 4 | B4 | ------------------ | 5 | B5 | ----------
------------------
| ID | Animal |
------------------
| 1 | B1 |
------------------
| 2 | B2 |
------------------
| 3 | B3 |
------------------
| 4 | B4 |
------------------
| 5 | B5 |
------------------
| 6 | 1 |
------------------
| 7 | 2 |
------------------
| 8 | R71 |
------------------
| 9 | R72 |
------------------
| 10 | 4 |
------------------
| 11 | 7 |
------------------
| 12 | R1 |
------------------
| 13 | 77 |
------------------
| 14 | 3 |
------------------
| 15 | 5 |
------------------
| 16 | R2 |
------------------
| 17 | T3 |
------------------
| 18 | C50 |
------------------
| 19 | R5 |
------------------
| 20 | R6 |
------------------
我的数据库是共享托管的,我没有任何可能设置新的配置,直到上周,我对animal+0 ASC的最终订单的查询按顺序返回结果,如:B1…B5,R1…R72,1…700。昨天,我们的数据库以相同的查询无序地返回了所有结果,而在developer DB中,它像往常一样有序地返回
我咨询了主机服务,但它确认DB没有问题,并且没有新的配置
我尝试使用CAST()和CONVERT()函数,但它返回的是animal-disorder
有人能解释一下这个问题吗?假设初始字符串只有一个字母,并且数字没有零填充,您可以执行以下操作:
order by (case when left(animal, 1) not between '0' and '9'
then left(animal, 1) else 'ZZ'
end),
length(animal) desc,
animal
如果初始字符串较长,您仍然可以执行类似操作,但逻辑要复杂一些。对于此示例数据,这将起作用:
SELECT *
FROM tablename
ORDER BY Animal + 0,
CASE WHEN Animal + 0 = 0 THEN LEFT(Animal, 1) END,
CASE WHEN Animal + 0 = 0 THEN SUBSTR(Animal, 2) + 0 END
请参阅。结果:
您想要什么样的订单?你能把预期的结果加到问题上吗?早上好,@Mureinik先生。我想得到像B1…B5,R1…R72,1…700(ASC);或R72…R1,B5…B1,700…1(描述)。谢谢。谢谢你,戈登·林诺夫先生。我尝试了您的方法,但返回“Erro SQL(1064):您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以获得正确的语法使用方法”)。也许Ia犯了些错误。@gmc\u pecas。语法很好:。@gmc_pecas。我很惊讶你没有接受这个答案,假设它真的做了你想做的事(我认为它做了)@戈登·林诺夫,对不起。我应该提到这个例子:我试图在另一个数据库中应用您的模型,它返回类似的结果。谢谢,非常感谢,福帕斯先生。我试过你的方法,成功了。说真的,我不明白这是怎么发生的,但我会学习(笑)。我读了手册,不明白发生了什么。此处:。请参阅:当我按动物id ASC编写命令时,它会将结果有序地返回给。但无论我是否更改ASC por DESC,该顺序仅适用于带有字母(A…Z)的动物名称。我用DESC尝试了你的方法,它返回了相同的结果。我不明白。。。(笑)非常感谢!@forpas先生,请参见dedemo,在您的方法中添加ID和DESC:。据我所知,你想先对所有非数字动物进行排序,然后对数字动物进行排序。是的,福帕斯先生。我用他是因为这是一个索引。我明白,阅读手册会有所帮助。我的英语不是很好。。。这就像是“在黑暗中射击”(葡萄牙语术语的自由翻译)。
> ID | Animal
> -: | :-----
> 1 | B1
> 2 | B2
> 3 | B3
> 4 | B4
> 5 | B5
> 18 | C50
> 12 | R1
> 16 | R2
> 19 | R5
> 20 | R6
> 8 | R71
> 9 | R72
> 17 | T3
> 6 | 1
> 7 | 2
> 14 | 3
> 10 | 4
> 15 | 5
> 11 | 7
> 13 | 77