1

テーブルに挿入される文字列があります。文字列のサイズと内容は異なります。

_ Part1ID =基本的に、2つの既知の単語(と)の間のすべての文字が必要です_ Part2ID =

文字列全体から、これら2つの文字列の間にあるすべてのものを取得したいと思います。

私はこのアプローチを試しましたが、前にすべてを取得しました_ Part2ID =

誰かが与えられた条件でこれを機能させる方法を知っていますか?

ありがとうございました

4

5 に答える 5

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)場合、結果が正しくnullになるようにします。

インライン関数を作成する場合は、もう少しエレガントになる可能性があります。

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 に答える
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 に答える