以下Oracle查询采用以逗号分隔的值列表,例如'3,4'
,并在单独的行中返回其各个令牌3
和4
。
有人可以在SQL Server中展示如何做同样的事情。
SELECT REGEXP_SUBSTR('3,4','[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR('3,4', '[^,]+', 1, LEVEL) IS NOT NULL
答案 0 :(得分:1)
查询将使用递归CTE。我认为这是逻辑:
with c as (
select '3,4' as rest, NULL as val
union all
select stuff(rest, charindex(',', rest + ',') + 1),
left(rest, charindex(',', rest + ',') - 1)
from c
)
select col
from c;
我应该注意Oracle 12c支持递归CTE,我(至少)发现它比connect by
更直观。