2017-06-01 260 views
1

是否有postgresql函數,最好是本地函數,可以將字符串(如「banana」)分類爲「aaabnn」?Postgresql函數對字符串中的字符進行排序

排序的算法效率並不重要,因爲單詞永遠不會太長。但是,數據庫聯接效率有一些但並不重要。

+0

'選擇array_to_string(陣列(選擇UNNEST (string_to_array('banana',null))order by 1),'')as 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的含義。我會盡快搜索和編輯答案。

正如DOCs一節「regexp_split_to_table」

編輯解釋說:正如我說過: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),'')as r;'。 'string_to_array'與'unnest'的組合更加正交,'array'和'array_to_string'錦上添花,將返回的字符串自身排序。 – user2297550

+0

雖然它的工作,我懷疑你的解決方案將更具性能,那麼我提供的。然後比較兩者的執行計劃。 –

相關問題