2012-08-05 91 views
1

我的表中有一个varchar字段,其中有各种条目。我如何使用ORDER BY语句得到以下结果:以字符串和数字开头的顺序,然后'数字串'

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

回答

2

这为我工作:

mysql> select * from sorting; 
+---------+ 
| field1 | 
+---------+ 
| 1  | 
| 4  | 
| 10  | 
| Item 1 | 
| Item 10 | 
| Item 0 | 
| 0  | 
+---------+ 
7 rows in set (0.00 sec) 

mysql> select field1 from sorting order by length(field1),field1 asc; 
+---------+ 
| field1 | 
+---------+ 
| 0  | 
| 1  | 
| 4  | 
| 10  | 
| Item 0 | 
| Item 1 | 
| Item 10 | 
+---------+ 
7 rows in set (0.00 sec) 
+0

非常感谢你! – 2012-08-05 15:39:01

1

试试这个:

order by (case when left(str, 1) between '0' and '9' then 1 
       else 0 
      end) desc, 
     (case when left(str, 1) between '0' and '9' then cast(str as unsigned) 
      end), 
     cast(substring(str, instr(' ', str)+1, 100) as unsigned) 

这应该任意初始字符串工作。它假定初始字符串和数字之间有空格。

相关问题