2017-02-20 5 views
0

私は並べ替えたい文字列を返すクエリを持っています。 ASC/DESCでソートすると、同じ結果が得られます。 は、ここでの出力例です:SQLの文字列順、数字が最後に表示されます

AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 
1200165 
120186 
120186 
120186 
120032 

しかし、私は、アルファベットの文字列の前に数字を持っているだろう。 は、例えば、ASCのために:DESCため例えば

1200165 
120186 
120186 
120186 
120032 
AVI 
ksky site 
Secure East 
Shlomi 
VSEStaging 

VSEStaging 
Shlomi 
Secure East 
ksky site 
AVI 
120032 

私は現在、そうのようなREGEXを使用します。

REGEXP_SUBSTR(UPPER(COLUMN_NAME), '^\D*') , 
TO_NUMBER(REGEXP_SUBSTR(UPPER(COLUMN_NAME), '\d+')) 

支援してください。

+0

https://asktom.oracle.com/pls/apex(** [このリンクの最後の答え]をチェックしてください/ f?p = 100:11:0 :::: P11_QUESTION_ID:9522557800346940016)** –

+0

提供されるソリューションは、ASCでは良いが、DESCには適しています。 –

+0

それは、すべての文字列が100%数字(他の文字なし)または100%文字(他の文字なし)のいずれかであるという前提の1つですか?それが保証されていない場合は、明確にする必要があります:文字列 '123abcd'はどのように注文するべきですか?どうすれば '#! - ' - 注文に落ちるべきですか?等 – mathguy

答えて

4

regexp_like()を使用できます。昇順ソートの場合:

order by (case when regexp_like(col, '^[0-9]+$') then 1 else 2 end) asc, 
     col asc 
+0

DESCはどうですか? –

+0

@DavidFaiz - これはASCとDESCで動作し、最後の単語を 'asc'から' desc'に変更します(コードの最初の行には触れず、2番目の行には触れません)。これは、あなたの文字列が(1)100%の数字と(2)それ以外のすべてであることを前提としています。元の投稿のコメント/質問を参照してください(説明のため)。 – mathguy

+0

@DavidFaiz - あなたは 'asc 'と' desc'の両方を変更しようとしましたか? –

0

あなたは、このような別の何かを試みることができる:

order by translate(upper(col), '1234567890', 'abcdefghij') 
関連する問題