我的数据库中有一些字符串。其中一些有数值(当然是字符串格式)。我正在显示那些按升序排序的值。
所以我们知道,对于字符串值,例如10大于2,这是正常的。我问是否有任何解决方案在2之后显示10,而不更改代码或数据库结构,只有数据。
例如,如果我必须显示1到10之间的值,我将:
我想拥有的是
是否有可能刊登“不可见的字符或字符串,将被解释为大于9”。如果我把a10而不是10,那么a10将在最后,但是那里有任何看不见或不太明显的特征。
所以,我再说一遍,我不是在寻找编程或数据库结构解决方案,而是为了一个简单的解决方法。
答案 0 :(得分:2)
您可以尝试将值转换为数字,然后按顺序排序:
select col
from yourtable
order by cast(col AS UNSIGNED)
答案 1 :(得分:1)
您可以尝试将正确数量的零附加到数据的前面:
01
02
03
..
10
11
..
99
答案 2 :(得分:0)
由于本专栏中混合了数字和字母 - 即使不在一行中 - 您真正要做的就是自然排序。这不是MySQL本身可以做的事情。然而,有一些工作。我遇到的最好的是:
按长度排序,然后按值排序。
选择 mixedColumn 从 表名 订购 LENGTH(mixedColumn),mixedColumn;
有关更多示例,请参阅:http://www.copterlabs.com/blog/natural-sorting-in-mysql/
使用辅助列作为包含某种规范化数据的排序键(即只包含数字或仅包含字母)。
CREATE TABLE tableName(mixedColumn varchar,sortColumn int); INSERT INTO tableName VALUES('1',1),('2',2),('10',3), ( '一个',4),( 'A1',5),( 'A2',6),( 'B1',7);
选择 mixedColumn 从 表名 订购 sortColumn;
除非你能找到处理订购的好方法,否则这很难维护。
当然,如果你能够走出数据库,你就可以使用各种编程语言的自然排序函数。