Sql substring使用“/”作为指示符在哪里剪切

时间:2017-09-29 11:32:32

标签: sql sql-server tsql substring

您好我想在sql中以2​​分切割一个字符串,其中“/”作为指示符在哪里切割。字符串看起来像这样:“test1 / test2 / test3 / test4 / test5 / test6”,我需要测试2和测试5的部分,但它们不是静态的,所以我必须使用“/”befor并在它们之后设点要切点,有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以使用XML实现此目的:

DECLARE @x NVARCHAR(100) = 'test1/test2/test3/test4/test5/test6';
DECLARE @xml XML = cast(('<X>'+replace(@x,'/' ,'</X><X>')+'</X>') as xml);

WITH cte AS(
  SELECT N.value('.', 'varchar(10)') as value, ROW_NUMBER() OVER (ORDER BY (SELECT(0))) AS rn
    FROM @xml.nodes('X') as T(N)
)
SELECT *
  FROM cte
  WHERE rn IN (1, 5)

答案 1 :(得分:0)

如果您想要的项目总是第二个,而倒数第二个,您可以使用CHARINDEX查找第一个和第二个&#39; /&#39;和SUBSTRING来提取这个价值。然后REVERSE字符串得到倒数第二个。 e.g。

DECLARE @data varchar(128) = 'test1/test2/test3/test4/test5/test6';

SELECT substring(@data,charindex('/',@data,1)+1,charindex('/',@data,charindex('/',@data,1)+1)-(charindex('/',@data,1)+1)),
       reverse(substring(reverse(@data),charindex('/',reverse(@data),1)+1,charindex('/',reverse(@data),charindex('/',reverse(@data),1)+1)-(charindex('/',reverse(@data),1)+1)))

答案 2 :(得分:0)

您可以使用CHARINDEX()函数 例如,此查询将适用于您

declare @text varchar(100)='test1/test2/test3/test4/test5/test6'

select 
    SUBSTRING (@text,CHARINDEX('/',@text)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1),
    SUBSTRING (@text,CHARINDEX('/',@text,CHARINDEX('/',@text,CHARINDEX('/',@text,CHARINDEX('/',@text)+1)+1)+1)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1)

只是因为你想要对其他东西进行子串,我正在分享下面的代码,然后你可以使用它

declare @text varchar(100)='test1/test2/test3/test4/test5/test6'

select 
SUBSTRING (@text,CHARINDEX('/',@text)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1)  --test2
,SUBSTRING (@text,CHARINDEX('/',@text,CHARINDEX('/',@text)+1)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1)  --test3
,SUBSTRING (@text,CHARINDEX('/',@text,CHARINDEX('/',@text,CHARINDEX('/',@text)+1)+1)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1)  --test4
,SUBSTRING (@text,CHARINDEX('/',@text,CHARINDEX('/',@text,CHARINDEX('/',@text,CHARINDEX('/',@text)+1)+1)+1)+1,CHARINDEX('/',@text,(CHARINDEX('/',@text)+1))-CHARINDEX('/',@text)-1) --test5
相关问题