我在 postgresql 中有一个表,其中的文本列具有如下值:
column
-----------
CA;TB;BA;CB
XA;VA
GA;BA;LA
我想对每个值中的元素进行排序,以便查询结果如下:
column
-----------
BA;CA;CB;TB
VA;XA
BA;GA;LA
我尝试过使用 string_to_array、regexp_split_to_array、array_agg,但我似乎并没有接近它。
谢谢。
最佳答案
我希望这很容易理解:
WITH tab AS (
SELECT
*
FROM
unnest(ARRAY[
'CA;TB;BA;CB',
'XA;VA',
'GA;BA;LA']) AS txt
)
SELECT
string_agg(val, ';')
FROM (
SELECT
txt,
regexp_split_to_table(txt, ';') AS val
FROM
tab
ORDER BY
val
) AS sub
GROUP BY
txt;
首先,我将值拆分为行 (regexp_split_to_table
) 并排序。然后 group by
原始值并再次加入 string_agg
。
输出:
BA;CA;CB;TB
BA;GA;LA
VA;XA
关于sql - 在postgresql中拆分字符串和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780880/