2012-08-05 26 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) 

這應該任意初始字符串工作。它假定初始字符串和數字之間有空格。

相關問題