Вы можете использовать split()
, чтобы разделить строку, а затем generate_array()
, чтобы получить нужные значения:
select t.*,
GENERATE_ARRAY(cast(split(numbers, '-')[ordinal(1)] as int64),
cast(COALESCE(split(numbers, '-')[SAFE_ORDINAL(2)], split(numbers, '-')[ordinal(1)]) as int64),
1)
from (select 1 as id, '342-345' as numbers UNION ALL
SELECT 2, '346'
) t;