-2
040, 044P, 041BL, 041W, 041PB

^^ 这是使用 Order By 子句出来的顺序。

我认为这应该是它的显示方式:

040, 041BL, 041PB, 041W, 044P

我知道以前一定有人问过类似的问题,但我还是什么都想不通!

编辑:在 XLant 的评论之后,我意识到我的错误。因此,简单的 order by 子句适用于上面给出的测试用例。但是,如果 GolezTrol 提到的位数并不总是 3,那么情况仍然很复杂。在这种情况下应该怎么做?

4

2 回答 2

1

尝试:

SELECT string,
       @num := CONVERT(string, signed)                            AS num_part,
       Substring(Trim(LEADING '0' FROM string), Length(@num) + 1) AS rest_of_string
FROM   table1
ORDER  BY num_part,
          rest_of_string  

这样,数字仍将按其数值排序(不考虑前导 0)。

小提琴

于 2013-07-16T08:44:49.153 回答
-1

尝试LPAD()功能 - 但请记住LPAD修剪数字。

http://sqlfiddle.com/#!2/d7281/3/0

于 2013-07-16T08:52:54.723 回答