Вы можете
- извлечь границы диапазона, используя
regexp_extract
- преобразовать границы диапазона в список значений, используя
sequence
- сглаживание с использованием
CROSS JOIN UNNEST
Пример:
SELECT id, x
FROM (VALUES ('A', '1-3'), ('B', '4-5')) t(id, range)
CROSS JOIN UNNEST (
sequence(
CAST(regexp_extract(range, '(\d+)-(\d+)', 1) AS bigint),
CAST(regexp_extract(range, '(\d+)-(\d+)', 2) AS bigint))
) s(x);
Пример вывода:
presto> SELECT id, x
-> FROM (VALUES ('A', '1-3'), ('B', '4-5')) t(id, range)
-> CROSS JOIN UNNEST (
-> sequence(
-> CAST(regexp_extract(range, '(\d+)-(\d+)', 1) AS bigint),
-> CAST(regexp_extract(range, '(\d+)-(\d+)', 2) AS bigint))
-> ) s(x);
id | x
----+---
A | 1
A | 2
A | 3
B | 4
B | 5
(5 rows)