为什么这个选择顺序不能按预期工作?

时间:2011-03-16 15:29:12

标签: mysql select

我的选择陈述是

SELECT styleNo , right( concat( '######', trim( styleNo ) ) , 6 ) AS keyn 
FROM `styles` WHERE 1 ORDER BY keyn

StyleNo是varchar(6)并且主要包含3到6个字符长的数字字符串,其中一些包括前导或尾随大写字母。目的是按大小顺序显示样式。

首先需要100到999,然后是A00到Z99,然后是1000到9999和A000到Z999等。

我得到了这些结果。

 101    ###101
 180    ###180
 105    ###105
 104    ###104
 102    ###102
 123    ###123
 124    ###124
 432    ###432
1004    ##1004
1001    ##1001
1002    ##1002
1003    ##1003
1006    ##1006
1234    ##1234
1231    ##1231
1255    ##1255
1288    ##1288
2005    ##2005
2006    ##2006
2007    ##2007
2008    ##2008

为什么结果不是按升序排列的? keyn是我所期待的。

我正在使用MySQL 5.1.36社区,其中包含UTF-8字符集。没有显示的styleNo包含除“0”到“9”字符以外的任何内容。

更多信息:我将sql语句更改为

SELECT styleNo , right( concat(repeat('#',5), trim( styleNo ) ) , 6 ) AS keyn
FROM `styles` ORDER BY keyn ASC 

尝试使用不同的值为5. 3和更大的值应该都为keyn生成合适的值。

但是3,4,5,6和7都会产生不同的结果顺序 - 都是错误的。 值8适用于我的测试文件中的前75行。

不理解为什么,我不相信这是正确的。

1 个答案:

答案 0 :(得分:0)

似乎你想按(修剪)字段的长度排序,所以你也可以说:

SELECT styleNo FROM `styles`
               WHERE 1
               ORDER BY LENGTH(TRIM(`styleNo`)),TRIM(`styleNo`)
styleNo一天更改为超过6个字符时,

可能会让您头疼。