2016-11-28 81 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更直觀。