MYSQL排序oder

时间:2016-11-23 14:03:03

标签: mysql sorting sql-order-by

$sql="SELECT * FROM stoc WHERE tip='$t' ORDER BY codint ASC LIMIT $offset, $rec_limit";

结果是

Acer1
Acer10
Acer11
Acer12
Acer2

我想要

Acer1
Acer2
Acer10
Acer11
Acer12

想法?

4 个答案:

答案 0 :(得分:0)

尝试按照列的长度和自己的列来排序。

SELECT * FROM stoc WHERE tip='$t'
ORDER BY LENGTH(codint),codint LIMIT $offset, $rec_limit"

如果存在其他字符串而不是Acer...,则可能会出现问题。

如果它们确实存在,我认为您需要将字符串拆分为字符串和数字,然后order by string,number

答案 1 :(得分:0)

我已经修好了。它得到最后一位数字并按顺序排列:http://rextester.com/OWE75092

SELECT `temp`, 
convert(
right(
     `temp`,
     CHAR_LENGTH(`temp`) - Least(
                                Locate('0',concat(`temp`, '0')),
                                Locate('1',concat(`temp`, '1')),
                                Locate('2',concat(`temp`, '2')),
                                Locate('3',concat(`temp`, '3')),
                                Locate('4',concat(`temp`, '4')),
                                Locate('5',concat(`temp`, '5')),
                                Locate('6',concat(`temp`, '6')),
                                Locate('7',concat(`temp`, '7')),
                                Locate('8',concat(`temp`, '8')),
                                Locate('9',concat(`temp`, '9'))
                           ) +1 ), UNSIGNED INTEGER) as myInt

FROM Table1
order by myInt;

答案 2 :(得分:0)

我在这里找到了 function 来移除非数字字符

我很容易复制创建克隆以删除数字字符,更改:

IF SUBSTR(as_val,i,1) NOT IN .... 
                      ^^^^^^

<强> DEMO

SELECT `t`,
        uf_no_digits(`t`) as name,
        CONVERT(uf_only_digits(`t`), SIGNED) as ID

FROM Table1
ORDER BY name, ID

<强>输出

enter image description here

答案 3 :(得分:0)

SELECT 'A2' x UNION SELECT 'A11' ORDER BY x;
+-----+
| x   |
+-----+
| A11 |
| A2  |
+-----+

SELECT 'A2' x UNION SELECT 'A11' ORDER BY x+0;
+-----+
| x   |
+-----+
| A2  |
| A11 |
+-----+