如何从格式为 n.n.n.n 的 ltree select 并在每个级别按数字排序?

How to select from an ltree with format n.n.n.n and sort as numbers at each level?

ltree 列的默认排序为文本。示例:我的 table id、parentid 和 wbs 中有 3 列。 ltree 列 - wbs 有 1.1.12, 1.1.1, 1.1.2 存储在不同的行中。 select 查询按 wbs 列排序 returns 1.1.1, 1.1.12, 1.1.2.

我需要它 return 1.1.1, 1.1.2, 1.1.12

如果 ltree 值的所有元素都是整数,您可以将它们转换为整数数组,可用于排序:

with my_table(wbs) as (
values 
    ('1.1.12'::ltree),
    ('1.1.1'),
    ('1.1.2')
)

select wbs
from my_table
order by string_to_array(wbs::text, '.')::int[]

  wbs   
--------
 1.1.1
 1.1.2
 1.1.12
(3 rows)