1

我有一个字符串被插入到表中。字符串的大小和内容各不相同。

我基本上想要两个已知单词(_ Part1ID =_ Part2ID =)之间的所有字符。

我想从整个字符串中获取这两个字符串之间的所有内容。

我已经尝试过这种方法,但之前得到了一切_ Part2ID =

任何人都知道如何在给定的条件下进行这项工作?

谢谢

4

5 回答 5

3
declare @someString nvarchar(200) = 'lkasjdlkasjdl_Part1ID=hereIsTheBitYouWant_Part2IDlksajdlaksdj'

select  substring(@someString, patindex('%_Part1ID%', @someString) + 9, patindex('%_Part2ID%', @someString) - (patindex('%_Part1ID%', @someString) + 9))
于 2013-02-14T15:20:31.200 回答
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)
于 2013-02-14T15:22:42.717 回答
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
于 2013-02-14T15:22:57.550 回答
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)
   )
于 2013-02-14T15:28:14.983 回答
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
于 2013-02-14T15:52:05.553 回答