2つの既知の文字列の間の値を取得するSQLクエリが必要です(返される値は、これら2つの文字列で開始および終了する必要があります)。
例。
「私が知っていたのは、犬が非常にひどく、他の誰かが何を考えていたとしてもすぐに厳しい罰を要求したことだけでした。」
この場合、既知の文字列は「the dog」と「immediately」です。したがって、私のクエリは「犬は非常にひどく、すぐに厳しい罰を要求していました」を返すはずです
私はこれまでのところこれを思いついたが、役に立たなかった:
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text), CHARINDEX('immediately', @Text))
@Textは、メイン文字列を含む変数です。
誰かが私が間違っているところを助けてくれますか?
問題は、サブストリング引数の2番目の部分に最初のインデックスが含まれていることです。これを機能させるには、2番目のインデックスから最初のインデックスを引く必要があります。
SELECT SUBSTRING(@Text, CHARINDEX('the dog', @Text)
, CHARINDEX('immediately',@text) - CHARINDEX('the dog', @Text) + Len('immediately'))
エヴァンの意図はこれだと思う:
SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text) + LEN(@First),
CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) - LEN(@First))
例は次のとおりです。文字列と文字$があります
文字列:
aaaaa$bbbbb$ccccc
コード:
SELECT SUBSTRING('aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1, CHARINDEX('$','aaaaa$bbbbb$ccccc',CHARINDEX('$','aaaaa$bbbbb$ccccc')+1) -CHARINDEX('$','aaaaa$bbbbb$ccccc')-1) as My_String
出力:
bbbbb
SUBSTRINGの長さを調整する必要があります。 「終了文字列」のENDを指していました。
次のようなものを試してください:
declare @TEXT varchar(200)
declare @ST varchar(200)
declare @EN varchar(200)
set @ST = 'the dog'
set @EN = 'immediately'
set @TEXT = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
SELECT SUBSTRING(@Text, CHARINDEX(@ST, @Text), (CHARINDEX(@EN, @Text)+LEN(@EN))-CHARINDEX(@ST, @Text))
もちろん、少し調整する必要があるかもしれません。
SELECT
SUBSTRING( '[email protected]', charindex('@','[email protected]',1) + 1, charindex('.','[email protected]',1) - charindex('@','[email protected]',1) - 1 )
これを試して、「[」と「]」を文字列に置き換えてください
SELECT SUBSTRING(@TEXT,CHARINDEX('[',@TEXT)+1,(CHARINDEX(']',@TEXT)-CHARINDEX('[',@TEXT))-1)
SQL ServerのPATINDEX()関数が必要かもしれないと感じています。これをチェックしてください:
かもね:
SELECT SUBSTRING(@TEXT, PATINDEX('%the dog%', @TEXT), PATINDEX('%immediately%',@TEXT))
DECLARE @Text VARCHAR(MAX), @First VARCHAR(MAX), @Second VARCHAR(MAX)
SET @Text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
SET @First = 'the dog'
SET @Second = 'immediately'
SELECT SUBSTRING(@Text, CHARINDEX(@First, @Text),
CHARINDEX(@Second, @Text) - CHARINDEX(@First, @Text) + LEN(@Second))
「すぐに罰」の開始位置を取得していますが、それをサブストリングの長さパラメーターとして渡します。
「すぐに罰する」のcharindexから「犬」の開始位置を減算し、3番目のパラメーターに「すぐに罰する」文字列の長さを追加する必要があります。これにより、正しいテキストが表示されます。
以下に、プロセスを説明するための大まかなハックコードを示します。
DECLARE @text VARCHAR(MAX)
SET @text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
DECLARE @start INT
SELECT @start = CHARINDEX('the dog',@text)
DECLARE @endLen INT
SELECT @endLen = LEN('immediately')
DECLARE @end INT
SELECT @end = CHARINDEX('immediately',@text)
SET @end = @end - @start + @endLen
SELECT @end
SELECT SUBSTRING(@text,@start,@end)
結果:犬は非常に悪く、すぐに過酷な処罰が必要でした
<pre>
DECLARE @text VARCHAR(MAX)
SET @text = 'All I knew was that the dog had been very bad and required harsh punishment immediately regardless of what anyone else thought.'
declare @pretext as nvarchar(100) = 'the dog'
declare @posttext as nvarchar(100) = 'immediately'
SELECT
CASE
When CHARINDEX(@posttext, @Text) - (CHARINDEX(@pretext, @Text) + len(@pretext)) < 0 THEN
''
Else
SUBSTRING(@Text, CHARINDEX(@pretext, @Text) + len(@pretext)
, CHARINDEX(@posttext, @Text) - (CHARINDEX(@pretext, @Text) + len(@pretext)) )
END as betweentext
これが役立つことを願っています:変更を行う必要がある場合に、変数を宣言しました。
@line varchar(100)を宣言します
@line ='[email protected] 'を設定します
選択SUBSTRING(@line、(charindex( '-'、@ line)+1)、CHARINDEX( '@'、@ line)-charindex( '-'、@ line)-1)
SELECT SUBSTRING('aaaaa$bbbbb$ccccc',instr('aaaaa$bbbbb$ccccc','$',1,1)+1, instr('aaaaa$bbbbb$ccccc','$',1,2)-1) -instr('aaaaa$bbbbb$ccccc','$',1,1)) as My_String