Как выбрать из дерева с форматом n.n.n.n и отсортировать по номерам на каждом уровне? - PullRequest
1 голос
/ 27 апреля 2019

Сортировка по умолчанию в столбце ltree выполняется в виде текста. Пример: у меня есть 3 столбца в идентификаторе таблицы, parentid и wbs. Столбец ltree - wbs хранит 1.1.12, 1.1.1, 1.1.2 в разных строках. Запрос на выборку, упорядоченный по столбцу wbs, возвращает 1.1.1, 1.1.12, 1.1.2.

Мне нужно вернуть 1.1.1, 1.1.2, 1.1.12

1 Ответ

1 голос
/ 27 апреля 2019

Если все элементы значений 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)
...