Postgresql 如何从格式为n.n.n.n的ltree中进行选择,并在每个级别按数字排序?

Postgresql 如何从格式为n.n.n.n的ltree中进行选择,并在每个级别按数字排序?,postgresql,ltree,Postgresql,Ltree,ltree列上的默认排序为文本。示例:我的表id、parentid和wbs中有3列。ltree列-wbs的1.1.12、1.1.1、1.1.2存储在不同的行中。按wbs排序的select查询列返回1.1.1、1.1.12、1.1.2. 我需要它返回1.1.1、1.1.2、1.1.12如果ltree值的所有元素都是整数,则可以将它们转换为整数数组,用于排序: with my_table(wbs) as ( values ('1.1.12'::ltree), ('1.1.1'),

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


我需要它返回
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)

请提供您尝试过的查询,以便社区可以帮助您,不尝试您将不会得到太多响应。谢谢。LTREE是否提供任何内置功能来保存任何节点的子节点应存储的序列?LTREE基于标签,基本上只是字符串。除了按字母顺序排序外,它没有任何功能可以对路径上的节点进行排序。也许你应该考虑使用整数数组而不是LTER,当然,在你不使用像LQuess这样的专门的LTER特性的情况下。