我有一个字符串被插入到表中。字符串的大小和内容各不相同。
我基本上想要两个已知单词(_ Part1ID =
和_ Part2ID =
)之间的所有字符。
我想从整个字符串中获取这两个字符串之间的所有内容。
我已经尝试过这种方法,但之前得到了一切_ Part2ID =
。
任何人都知道如何在给定的条件下进行这项工作?
谢谢
我有一个字符串被插入到表中。字符串的大小和内容各不相同。
我基本上想要两个已知单词(_ Part1ID =
和_ Part2ID =
)之间的所有字符。
我想从整个字符串中获取这两个字符串之间的所有内容。
我已经尝试过这种方法,但之前得到了一切_ Part2ID =
。
任何人都知道如何在给定的条件下进行这项工作?
谢谢
declare @someString nvarchar(200) = 'lkasjdlkasjdl_Part1ID=hereIsTheBitYouWant_Part2IDlksajdlaksdj'
select substring(@someString, patindex('%_Part1ID%', @someString) + 9, patindex('%_Part2ID%', @someString) - (patindex('%_Part1ID%', @someString) + 9))
DECLARE @s varchar(1000)
SET @s = 'this is a test _ Part1ID = of the emergency broadcast _ Part2ID = system'
SELECT SUBSTRING(@s, PATINDEX('%_ Part1ID =%',@s)+11,
PATINDEX('%_ Part2ID =%',@s)-PATINDEX('%_ Part1ID =%',@s)-11)
尝试:
with a as
(select 'abc_ Part1ID =efg_ Part2ID =jkl' a)
select a,
substring(a,
charindex('_ Part1ID =',a)+len('_ Part1ID ='),
charindex('_ Part2ID =',a)-charindex('_ Part1ID =',a)-len('_ Part1ID ='))
from a
使用您的关键字和字段名称修改此模板。
declare @mystring nvarchar(max) = 'some irrelevant text STARTPOINTI Should Return this text to youENDPOINT other irrelevant text';
declare @bookend1 nvarchar(max) = 'STARTPOINT';
declare @bookend2 nvarchar(max) = 'ENDPOINT';
select
substring
(
@mystring
,CHARINDEX(@bookend1,@mystring) + len(@bookend1)
,charindex(@bookend2,@mystring) - charindex(@bookend1,@mystring) - len(@bookend1)
)
假设字符串(或字符串列)被命名s
,尝试:
substring(s, nullif(charindex('_ Part1ID = ', s),0) + 12 -- skip tag (length = 12)
, nullif(charindex('_ Part2ID = ', s),0)
- (nullif(charindex('_ Part1ID = ', s),0) + 12) )
这假定 Part2ID 标记永远不会出现在 Part1ID 之前。nullif(charindex(...),0)
如果我们没有找到标签,我们这样做是为了让结果正确地为空。
如果你要创建一个内联函数,你可以更优雅一点:
CREATE FUNCTION dbo.fnGetPart (
@s varchar(8000), @tag1 varchar(20), @tag2 varchar(20)
) returns varchar(100) AS
BEGIN
return ( select substring(@s, i1, i2 - i1)
from ( select i1, i2 = nullif(charindex(@tag2, @s, i1),0) -- ', i1' ensures we look after @tag1
from (select i1 = nullif(charindex(@tag1, @s),0) + len(@tag1)) t ) t )
END