是否有postgresql函數,最好是本地函數,可以將字符串(如「banana」)分類爲「aaabnn」?Postgresql函數對字符串中的字符進行排序
排序的算法效率並不重要,因爲單詞永遠不會太長。但是,數據庫聯接效率有一些但並不重要。
是否有postgresql函數,最好是本地函數,可以將字符串(如「banana」)分類爲「aaabnn」?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
的含義。我會盡快搜索和編輯答案。
正如DOCs一節「regexp_split_to_table」
編輯解釋說:正如我說過:E
意義的字符串之前,你可以在這裏看到:What's the "E" before a Postgres string?
嗯......我的靈感來自於這樣做:'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
雖然它的工作,我懷疑你的解決方案將更具性能,那麼我提供的。然後比較兩者的執行計劃。 –
'選擇array_to_string(陣列(選擇UNNEST (string_to_array('banana',null))order by 1),'')as r;' – user2297550