テーブルに挿入される文字列があります。文字列のサイズと内容は異なります。
_ Part1ID =
基本的に、2つの既知の単語(と)の間のすべての文字が必要です_ Part2ID =
。
文字列全体から、これら2つの文字列の間にあるすべてのものを取得したいと思います。
私はこのアプローチを試しましたが、前にすべてを取得しました_ Part2ID =
。
誰かが与えられた条件でこれを機能させる方法を知っていますか?
ありがとうございました
テーブルに挿入される文字列があります。文字列のサイズと内容は異なります。
_ Part1ID =
基本的に、2つの既知の単語(と)の間のすべての文字が必要です_ Part2ID =
。
文字列全体から、これら2つの文字列の間にあるすべてのものを取得したいと思います。
私はこのアプローチを試しましたが、前にすべてを取得しました_ Part2ID =
。
誰かが与えられた条件でこれを機能させる方法を知っていますか?
ありがとうございました
文字列(または文字列列)に名前が付けられていると言って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
このテンプレートをキーワードとフィールド名で変更します。
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)
)