2

手伝って頂けますか?

私の質問は

SELECT num FROM sortnum ORDER BY lpad(num, 10, 0) 

このクエリの結果は良くありませんここに結果があります

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
1a 
2a 
2b 
A1 
A2 
A3 
A4 
B1 
A10 
A11 
B10 

このタイプのデータに最適なクエリは何ですか?最初に番号を付け、次にaで始まり、次にbで始まるデータ

私は次のような結果が欲しい

1 
1a 
2 
2a 
2b 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
A1 
A2 
A3 
A4 
A10 
A11 
B1 
B10 

前もって感謝します

4

2 に答える 2

6

アルファベットのプレフィックスの長さが最大で 1 文字であると仮定すると、次のようにすることができます。

SELECT   num
FROM     sortnum
ORDER BY
  CAST(num AS UNSIGNED)=0,     -- those starting with numbers before non-numbers
  CAST(num AS UNSIGNED),       -- then by number prefix (if any)
  LEFT(num,1),                 -- then by first character
  CAST(MID(num,2) AS UNSIGNED) -- then by remaining numbers

sqlfiddleで参照してください。

于 2012-10-12T12:36:41.450 に答える
0
SELECT num,
CONVERT(SUBSTRING_INDEX(num,'-',-1),UNSIGNED INTEGER) AS num
FROM sortnum
ORDER BY num;
于 2012-10-12T12:26:41.620 に答える