我的选择陈述是
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行。
不理解为什么,我不相信这是正确的。
答案 0 :(得分:0)
似乎你想按(修剪)字段的长度排序,所以你也可以说:
SELECT styleNo FROM `styles`
WHERE 1
ORDER BY LENGTH(TRIM(`styleNo`)),TRIM(`styleNo`)
当styleNo
一天更改为超过6个字符时,可能会让您头疼。