2016-11-28 101 views
-1

以下Oracle查询采用逗号分隔的值列表(如'3,4'),并将其单独的令牌34返回到单独的行中。Oracle REGEXP_SUBSTR的SQL Server模拟

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

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

如果您可以显示一些样本数据和预期结果 – TheGameiswar

+0

可能重复,这将是有益的。 http://stackoverflow.com/questions/36189734/replace-regexp-substr-in-sql-server?rq=1 –

+0

@TheGameiswar - 这是在后的所有:输入是一个字符串,''3,4 “'。正如问题中所述,所需的输出是将值“3”和“4”分开。 OP显示了在Oracle中执行该操作的正确有效方法之一。他想知道如何在SQL Server中做到这一点。 – mathguy

回答

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; 

我要指出,甲骨文12C支持递归CTE的,这是我的(至少)找到比connect by更直观。