'banana'や 'aaabnn'などの文字列をソートできるpostgresql関数、できればネイティブ関数はありますか?Postgresql文字列内の文字を並べ替える機能
並べ替えのアルゴリズム効率はあまり重要ではないため、単語が長すぎることはありません。ただし、データベースの結合効率は重要ではありませんが、重要です。
'banana'や 'aaabnn'などの文字列をソートできるpostgresql関数、できればネイティブ関数はありますか?Postgresql文字列内の文字を並べ替える機能
並べ替えのアルゴリズム効率はあまり重要ではないため、単語が長すぎることはありません。ただし、データベースの結合効率は重要ではありませんが、重要です。
あり、このような機能を持つネイティブ機能はありませんが、あなたはこのように行うには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?
ええと...私は代わりにこれを行うようにインスピレーションを受けました:' 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
私はあなたのソリューションが私が提供しているものよりも優れたものになるとは思えません。両方の実行計画を比較してください。 –
'選択array_to_string(配列(アンネスト選択を(string_to_array( 'banana'、null))order by 1)、 '')r; ' – user2297550