10 lines
380 B
Text
10 lines
380 B
Text
create or replace function range_expansion(s) as (
|
|
regexp_extract_all(s, '[^,]+')
|
|
.list_transform( x ->
|
|
regexp_extract(x, '(-?[0-9]+)-(-?[0-9]+)|(.*)', ['a', 'b', 'c']) )
|
|
.list_transform( x -> if (x.a = '', [x.c::BIGINT],
|
|
range( x.a::INT, x.b::INT + 1) ) )
|
|
.flatten()
|
|
);
|
|
|
|
select range_expansion( '-6,-3--1,3-5,7-11,14,15,17-20') as range;
|