2016-06-12 4 views
1
、私は次の順序でデータのORDER BYたい

:なしダッシュでORDERは、ソート

  • 番号-数
  • アルファ・ナンバー
  • アルファ

私は、次のしています種別:

  • 120-1
  • 120-2
  • 120から10
  • デジタル-1
  • デジタル-10
  • デジタル-2
  • ウェディング

これは除いて、私が探しているためでありますデジタル(ダッシュ付きのアルファ)エントリは、ダッシュの後の数字でソートされません。多くの試みの後

は、ここに私の現在のSQLステートメントです:私は間違って

SELECT SessionID, Identifier FROM Session 
ORDER BY 
CASE 
    WHEN CAST(Identifier AS INTEGER) THEN SUBSTR(Identifier,0, INSTR(Identifier, '-')) + CAST(SUBSTR(Identifier, INSTR(Identifier, '-')+1, 999) AS INTEGER) 
ELSE Identifier END 

何をしているのですか?

ありがとうございました。

+0

予想された注文の代わりにどのような出力が得られますか? – Murphy

+0

「私は次の並べ替えをしています:」の下のリスト。デジタル(ダッシュ付きアルファ)以外はすべて数字で表示されません。 – rkamarowski

+0

regexpを使用できますか?私を与える –

答えて

2

1)注文コラム自体

によって整数適用、エルス順序として

3)それらをキャスト-を含む文字列で-後の第二の部分順列自体

select val 
from t 
order by 
case when val like '%-%' then 1 else 2 end 
,case when substr(val,1,instr(val,'-')-1) glob '*[0-9]*' 
     then cast(substr(val,1,instr(val,'-')-1) as integer) 
     when substr(val,1,instr(val,'-')-1) glob '*[a-zA-Z]*' 
     then substr(val,1,instr(val,'-')-1) 
else val end 
,case when val like '%-%' then cast(substr(val,instr(val,'-')+1) as integer) 
else val end 
によって整数適用、エルス順序として

SQL Fiddle

+0

パーフェクト!ありがとうございました。 – rkamarowski

0

はあなたのロジックは、何らかの形で文字列を再構築されていますが、order byのために、あなたはこのような何かしたい:

order by (case when CAST(Identifier AS INTEGER) <> 0 then 1 
       when Identifier like '%-%' then 2 
       else 3 
      end), 
     identifier 

注:これは数字が0は決してしないことを前提としています。彼らはそれらをキャスト-を含む文字列で-前に、最初の部分で最初

2)注文を見えるように、それらで-を持つ文字列によって

+0

ゴードン:120-1 120-2 120から10 結婚式デジタル-1 デジタル-10 デジタル-2 全てアルファ(結婚式)は底部ではなく、デジタルでありますまだ番号でソートされていません。 – rkamarowski

+0

ゴードン、それは私に与えます: – rkamarowski

関連する問題