是否有可能使用数值更改字符串的顺序

时间:2013-01-10 10:46:44

标签: mysql database string

我的数据库中有一些字符串。其中一些有数值(当然是字符串格式)。我正在显示那些按升序排序的值。

所以我们知道,对于字符串值,例如10大于2,这是正常的。我问是否有任何解决方案在2之后显示10,而不更改代码或数据库结构,只有数据。

例如,如果我必须显示1到10之间的值,我将:

  • 1
  • 10
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

我想拥有的是

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

是否有可能刊登“不可见的字符或字符串,将被解释为大于9”。如果我把a10而不是10,那么a10将在最后,但是那里有任何看不见或不太明显的特征。

所以,我再说一遍,我不是在寻找编程或数据库结构解决方案,而是为了一个简单的解决方法。

3 个答案:

答案 0 :(得分:2)

您可以尝试将值转换为数字,然后按顺序排序:

select col
from yourtable
order by cast(col AS UNSIGNED)

请参阅SQL Fiddle with demo

答案 1 :(得分:1)

您可以尝试将正确数量的零附加到数据的前面:

01
02
03
..
10
11
..
99

答案 2 :(得分:0)

由于本专栏中混合了数字和字母 - 即使不在一行中 - 您真正要做的就是自然排序。这不是MySQL本身可以做的事情。然而,有一些工作。我遇到的最好的是:

  1. 按长度排序,然后按值排序。

    选择   mixedColumn 从   表名 订购   LENGTH(mixedColumn),mixedColumn;

    有关更多示例,请参阅:http://www.copterlabs.com/blog/natural-sorting-in-mysql/

  2. 使用辅助列作为包含某种规范化数据的排序键(即只包含数字或仅包含字母)。

    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;

    除非你能找到处理订购的好方法,否则这很难维护。

  3. 当然,如果你能够走出数据库,你就可以使用各种编程语言的自然排序函数。