

PostgreSQL バージョン 9.3 で「英字の昇順」「数字の昇順」とソートをかけたいのですが、  
方法はありますでしょうか。

0001  
0003  
0010  
a001  
d001  
k001  
i001  
z001

↓ ORDER BYをすると以下にソートしたいのですが、方法はありますでしょうか。

a001  
d001  
i001  
k001  
z001  
0001  
0003  
0010


CC BY-SA 3.0
2018-02-07T05:29:26.957
41535
2018-02-07T21:59:06.320
27316
question
postgresql
PostgreSQLのソートで英字昇順、数字昇順で表示

[code]

    create table mytable (
      mycolumn char(4)
    );
    
    insert into mytable(mycolumn) values 
    ('0001'), ('0003'), ('0010'), ('a001'), ('d001'), ('k001'), ('i001'), ('z001');
    
[/code]

1文字目が数字の場合は英字の場合よりソート順を下げる、ということであれば次のような`order by`を設定するというのはどうでしょうか。

[code]

    select * from mytable
    order by case when mycolumn ~'^\d' then 2 else 1 end, mycolumn;
    
[/code]

結果:

[code]

     mycolumn 
    ----------
     a001
     d001
     i001
     k001
     z001
     0001
     0003
     0010
    (8 rows)
    
[/code]


CC BY-SA 3.0
2018-02-07T21:59:06.320
41553
2018-02-07T21:59:06.320
2808
41535
answer