テーブルにさまざまなエントリを持つ 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
テーブルにさまざまなエントリを持つ 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
これは私のために働いた:
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)
これを試して:
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)
これは、任意の初期文字列に対して機能するはずです。最初の文字列と数字の間にスペースがあると想定しています。