在一列中我有“1;2;3;6-9”
我需要将此字符串放入像这样的数组中(1,2,3,6,7,8,9)
select range from my_table
返回
| range |
|-----------|
| 1;2;3;6-9 |
我需要运行
select id from my_another_table where id in("1;2;3;6-9")
| id |
|----|
| 1 |
| 2 |
| 3 |
| 6 |
| 7 |
| 8 |
| 9 |
最佳答案
这是一个糟糕的数据结构。但是您可以使用 generate_series()
和字符串函数来做到这一点:
select generate_series(v2.lo, v2.hi, 1)
from (values ('1;2;3;6-9')) v(str) cross join lateral
regexp_split_to_table(v.str, ';') as r(range) cross join lateral
(values (case when range not like '%-%' then range::int else split_part(range, '-', 1)::int end,
case when range not like '%-%' then range::int else split_part(range, '-', 2)::int end
)
) v2(lo, hi);
关于sql - 如何在SQL中将字符串转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601410/