SQL Server类似于Oracle的REGEXP_SUBSTR

时间:2016-11-28 16:09:22

标签: sql sql-server

以下Oracle查询采用以逗号分隔的值列表,例如'3,4',并在单独的行中返回其各个令牌34

有人可以在SQL Server中展示如何做同样的事情。

SELECT REGEXP_SUBSTR('3,4','[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY REGEXP_SUBSTR('3,4', '[^,]+', 1, LEVEL) IS NOT NULL

1 个答案:

答案 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更直观。