トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-9 アルファベットのソート

SQLパズル

AlphaTable
Val
---
aA
Aa
ab
aC
bC
Bz
CB
Cz

アルファベット順で小文字、大文字の順にソートして出力する。

出力結果
Val
---
aA
ab
aC
Aa
bC
Bz
CB
Cz

こちらを参考にさせていただきました(英語)


データ作成スクリプト

create table AlphaTable(Val) as
select 'aA' from dual union
select 'aA' from dual union
select 'Aa' from dual union
select 'ab' from dual union
select 'aC' from dual union
select 'bC' from dual union
select 'Bz' from dual union
select 'CB' from dual union
select 'Cz' from dual;


SQL

--■■■upper関数を使用■■■
select Val from AlphaTable
order by
upper(substr(Val,1,1)),substr(Val,1,1) desc,
upper(substr(Val,2,1)),substr(Val,2,1) desc;

--■■■translate関数を使用■■■
select Val from AlphaTable
order by
translate(Val,
'aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ',
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghujklmnopqrstuvwxyz');


解説

一文字ごとに、
upper関数で大文字小文字を区別せずにソートした後に、
descでソートして大文字を先に表示してます。

translate関数を使う方法もあります。