我有一个字符串可以插入到表中。字符串的大小和内容各不相同。
我基本上想要两个已知单词(_ Part1ID =
和_ Part2ID =
)之间的所有字符。
我希望从整个字符串中获取这两个字符串之间的所有内容。
我已尝试this approach,但在_ Part2ID =
之前获取所有内容。
任何人都知道如何在特定条件下完成这项工作?
谢谢
答案 0 :(得分:3)
declare @someString nvarchar(200) = 'lkasjdlkasjdl_Part1ID=hereIsTheBitYouWant_Part2IDlksajdlaksdj'
select substring(@someString, patindex('%_Part1ID%', @someString) + 9, patindex('%_Part2ID%', @someString) - (patindex('%_Part1ID%', @someString) + 9))
答案 1 :(得分:2)
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)
答案 2 :(得分:2)
尝试:
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
答案 3 :(得分:1)
使用您的关键字和字段名称修改此模板。
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)
)
答案 4 :(得分:1)
说字符串(或字符串列)名为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