SQL获取第二个和第三个正斜杠之间的值



在SQL Server中,我试图获得第二个和第三个正斜杠(/)字符之间的值。数字的长度可以变化,因此substring(column, 8, 10)不起作用。

123/123/123456789/12

我想在当前的例子中得到的是:123456789

您的数据有4个部分,如图所示,您可以滥用parsename函数:

declare @string varchar(50) = '123/123/123456789/12';
select ParseName(Replace(@string,'/','.'),2);

请尝试以下基于标记化的解决方案

这个方法是泛型的,不管有多少个令牌。

可以从SQL Server 2012开始使用

/p>

-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, tokens VARCHAR(100));
INSERT @tbl (tokens) VALUES
('123/123/123456789/12'),
('123/123/9876543210/12');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = '/';
SELECT t.* 
, ThirdToken = c.value('(/root/r[position() eq 3]/text())[1]', 'VARCHAR(100)')
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' + 
REPLACE(tokens, @separator, ']]></r><r><![CDATA[') + 
']]></r></root>' AS XML)) AS t1(c);

<表类>ID标记ThirdTokentbody><<tr>1123/123/123456789/121234567892123/123/9876543210/129876543210

既然你在2016年,考虑以下

Declare @YourTable table (ID int,SomeCol varchar(50))
Insert Into @YourTable values 
(1,'123/123/123456789/12')
Select A.ID
,Pos3 = JSON_VALUE(JS,'$[2]')
From  @YourTable A
Cross Apply (values ('["'+replace(SomeCol,'/','","')+'"]') ) B(JS)

结果

ID  Pos3
1   123456789

如果只需要单个值,则不需要CROSS APPLY

Select A.ID
,Pos3 = JSON_VALUE('["'+replace(SomeCol,'/','","')+'"]','$[2]')
From  @YourTable A

最新更新