MYSQL - 按ASCII值对列进行排序

8

我有一列文本,按ASCII排序应该按以下顺序排序:

-  (hyphen)
0
1  (numbers)
2
A  (uppercase)
B
_  (underscore)
a
b  (lowercase)
c

然而,它被命名为:

-  (hyphen)
0
1  (numbers)
2
a
b  (lowercase)
c
A
B  (uppercase)
C
_  (underscore)

如何按ASCII值进行排序?


只需使用函数将所有值转换为大写/小写以进行排序?可以使用以下语句:order by Upper(column)order by lower(column) - xQbert
那样做不行,因为你最终会得到大小写混合的元素。 - htafoya
非常正确,我误读了问题。 - xQbert
2个回答

9

排序顺序由排序规则控制。您可以使用BINARY排序规则按原始字节排序,在ASCII数据的情况下,将根据ASCII值进行排序。请参见https://dev.mysql.com/doc/refman/5.7/en/sorting-rows.html

SELECT ...
FROM mytable
ORDER BY BINARY mycolumn

使用BINARY排序规则比使用ASCII()函数更加灵活,因为该函数仅返回第一个字符的ASCII值。使用BINARY排序规则可以对整个字符串进行排序。


这就是我想要的! - htafoya

6
你可以使用ASCII函数来实现:

您可以使用ASCII

SELECT *
FROM tab
ORDER BY ASCII(col_name) ASC

这仅适用于第一个字符。如果i有Ab和Ac,它们将无法正确排序。 - htafoya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接