我有一列的值为'/ 1064_MyHoldings / ONLINE / Adhoc / Rpt_CompanyCodeElig'
现在,我的要求是提取分度计之间的每个值; '1064 MyHoldings','ONLINE','Adhoc'等?
我尝试了以下代码,但只使用了“ 1064 MyHoldings”。但是我也需要其他值 有人可以帮我吗?
WITH yourTable AS (
SELECT '/1064_MyHoldings/ONLINE/Adhoc/Rpt_CompanyCodeElig' AS Path
)
SELECT
CASE WHEN Path LIKE '%/%/%' THEN
SUBSTRING(Path,
CHARINDEX('/', Path) + 1,
CHARINDEX('/', Path, CHARINDEX('/', Path) + 1) - CHARINDEX('/', Path) - 1)
ELSE 'NA' END AS first_component
FROM yourTable;
答案 0 :(得分:1)
select s.value
from t cross apply
string_split(path, '/') s
答案 1 :(得分:0)
您可以使用CTE进行递归搜索并拆分字符串。
WITH yourTable AS (
SELECT '/1064_MyHoldings/ONLINE/Adhoc/Rpt_CompanyCodeElig' AS Path
),
cte_splitTable as
(
SELECT value as val, 1 as lvl
from yourTable
cross apply
string_split(Path,'_')
UNION ALL
SELECT t.value as val, lvl+1 as lvl
from cte_splitTable as c
cross apply
string_split(c.val,'/') as t
where CHARINDEX('/',val) > 0
)
select * from cte_splitTable
where PATINDEX('%[_/]%',val) = 0 and len(val) > 0
+-----------------+
| val |
+-----------------+
| CompanyCodeElig |
| MyHoldings |
| ONLINE |
| Adhoc |
| Rpt |
| 1064 |
+-----------------+