2017-06-01 30 views
1

'banana'や 'aaabnn'などの文字列をソートできるpostgresql関数、できればネイティブ関数はありますか?Postgresql文字列内の文字を並べ替える機能

並べ替えのアルゴリズム効率はあまり重要ではないため、単語が長すぎることはありません。ただし、データベースの結合効率は重要ではありませんが、重要です。

+0

'選択array_to_string(配列(アンネスト選択を(string_to_array( 'banana'、null))order by 1)、 '')r; ' – user2297550

答えて

3

あり、このような機能を持つネイティブ機能はありませんが、あなたはこのように行うにはregexp_split_to_tableを使用することができます。

select theword 
    from (select regexp_split_to_table('banana',E'(?=.)') theword) tab 
order by theword; 

結果は次のようになります。

theword 
    a 
    a 
    a 
    b 
    n 
    n 

この(?=.)は残して、各文字で分割されますセパレータとしての文字。スペースも識別します。空白を含む単語があり、スペースが必要ない場合は、E'(\\s*)'はすべての空白文字と一致します。私はEの意味を思い出さない。私はすぐに答えを探して編集します。

としては、「regexp_split_to_table」

EDITセクションにDOCsで説明:私が言ったように:Eの意味を文字列の前にあなたがここに見ることができます:What's the "E" before a Postgres string?

+0

ええと...私は代わりにこれを行うようにインスピレーションを受けました:' select array_to_string(array(select unnest(string_to_array( 'banana'、 null)))order by 1)、 '')としてr; '。 'string_to_array'と' unnest'の組み合わせはより直交していて、 'array'と' array_to_string'は、ソートされた文字列そのものを返すケーキ上に氷結しています。 – user2297550

+0

私はあなたのソリューションが私が提供しているものよりも優れたものになるとは思えません。両方の実行計画を比較してください。 –

関連する問題