2017-06-15 11 views
0

nvarchar(max)の列を持つテーブルがあります。この列を検索して、特定のステートメントが作成されているかどうかを確認します。nvarchar maxの部分文字列を選択

SELECT sectionText 
FROM Section 
WHERE sectionText LIKE '%This statement is true%' 

ただし、これはセクションテキスト全体を返します。この文の前の50文字を1列に返すだけです。

+3

されていること奇妙な要件ですが、十分に簡単です。部分文字列とcharindexを使用します。 –

答えて

1

あなたはこれらを試すことができます:

--This line would replace your phrase 
SELECT REPLACE(sectionText,'This statement is true','') 
FROM Section ; 

--Another way... 
--Assuming your column is: 50 characters + ' ' + 'This statement is true' + ' ' + The other 50 characters 
SELECT SUBSTRING(sectionText, 1, 50) + ' ' + SUBSTRING(sectionText, 74, 50) 
FROM Section 
WHERE sectionText LIKE '%This statement is true%'; 

あなたはinfoより、このMSDNのリンクを確認することができます。 私は迅速な例を提供してみましょう:@SeanLangeコメント(よりよいアプローチ)へ

SELECT x = SUBSTRING('abcdef', 2, 3) 

SELECT x= SUBSTRING('abcdef', 2,1) + SUBSTRING('abcdef', 5,1) 

ありがとう:

DECLARE @sectionText VARCHAR(1200) = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut a dui quam. Sed pretium purus sed lorem volutpat fringilla. Sed imperdiet sodales justo, sed suscipit mi maximus ac. Aenean ligula quam, gravida a eleifend a, vulputate nec dolor. Donec sit amet mi in justo mollis mollis eu ac magna. Integer dolor nulla, mollis eu tempus et, lobortis in libero. Etiam vitae pulvinar mauris. Curabitur a nulla orci. This statement is true. Nam non est nec urna aliquam gravida. Sed diam lorem, finibus eu arcu et, iaculis ullamcorper diam. Sed vitae tellus odio. In hac habitasse platea dictumst. Maecenas lobortis consequat erat. Fusce aliquam imperdiet.'; 
DECLARE @MyPattern varchar(10) = 'This statement is true'; 

DECLARE @firstPosition INT, @lastPosition INT, @gambit INT, @textLenght INT; 

--Grabbing the positions 
SET @firstPosition = CHARINDEX(@sectionText, @sectionText,49) 
SET @gambit = LEN(@MyPattern) 
SET @lastPosition = @firstPosition + (@gambit + 1); --Sum 1 because of a White Space of a 
SET @textLenght = LEN(@sectionText); 

SELECT SUBSTRING(@sectionText, 1, @firstPosition) + ' ' + SUBSTRING(@sectionText, @lastPosition, @textLenght) AS [CleanText] 
--FROM Section 
--WHERE sectionText LIKE '%This statement is true%'; 
+1

見つかった文字列がポジション100で始まる場合、これは機能しません。確かに正しい方向ですが、OPが探しているものをキャプチャするのに十分な堅牢性はありません。 –

+0

私は読んで時間がかかりました。あなたは正しいです@SeanLange、私はスニペットを開発したいと思いましたが、CHARINDEX()は大きなVARCHARで私のために働いていません。 –

+1

あなたが検索しようとしている文字列があなたの変数にないので、ホーズされています。変数はvarchar(175)として宣言されていますが、文字列は410番目の位置までは開始されません。これは、変数のサイレント切り捨てがあることを意味します。チャンスのセクション長めのテキスト。 –

0

これは私が行うことができたものです。

SELECT SUBSTRING(sectionText, CHARINDEX('This statement is true', sectionText)-50, 100) 
FROM Section 
WHERE sectionText LIKE '%This statement is true%' 
+0

これはあなたの要件を満たしていません。それは本当に近いです。あなたはあなたが検索している価値の後に50文字を望んでいると言いました。 len(SearchVal)を100だけでなく、部分文字列の長さに追加する必要があります。 –

関連する問題