【发布时间】:2017-08-18 16:55:12
【问题描述】:
有人提出了与此相关的问题,但我没有得到我需要的解决方案。
我尝试拆分的字符串如下所示:
/Dev/act/billing
或
/ST/recManage/prod/form
我遇到的问题是,当我尝试使用 LEFT/RIGHT/SUBSTRING/CHARINDEX 执行操作时,第一个“/”给我带来了问题。它弄乱了计数并在分隔符处停止。此外,重要的是要注意分隔符的数量会发生变化。所以我想找到一种方法来拆分它,这样我就可以获得所有可能的子字符串。
RIGHT(c3.Path,CHARINDEX('/', REVERSE(c3.Path))-1) AS LastPath
这让我得到了字符串的最后一部分。我把其他事情搞砸了:
SUBSTRING(c3.Path,CHARINDEX('/',c3.Path,(CHARINDEX('/',c3.Path)+1))+1,len(c3.Path)),
这会得到第二个'/'之后的所有内容
我也弄乱了 XML 和
SET @delimiter='/'
;WITH CTE AS
(SELECT CAST('<M>' + REPLACE([Path], @delimiter , '</M><M>') + '</M>' AS XML)
AS [Type XML]
FROM [Rpts].[dbo].[Cata]
)
,
CTE2 as (Select [Type XML].value('/M[2]', 'varchar(50)') As FirstPath from CTE)
然后做: CTE2.FirstPath 得到结果。但这会给出 NULL
我不在 SQL 2016 上,所以我不能使用 SPLIT_STRING。
谢谢
【问题讨论】:
-
是否需要将每个值拆分并放入行中?
标签: sql sql-server tsql