一貫した既知の部分文字列 ("To Find a") の前にあるすべての単語を削除しようとしています。「To Find a」の前の文字列を 600 個以上まとめて削除したいと考えていDescription
ます。この部分文字列の前の単語は、すべての場合で異なります。たとえば ( Description
「いくつかのテキスト、いくつかのテキスト…検索するには…もっと多くのテキスト」) 私は他のいくつかの投稿を赤くしており、TRIM、CHARINDEX、および SUBSTRING_INDEX を使用してみました。助けてくれてありがとう!
2 に答える
これが SQL Server の場合、先頭のビットを削除する比較的簡単な方法は、SUBSTRINGとCHARINDEXを使用することです。
SELECT SUBSTRING(ColumnName, CHARINDEX('To Find a', ColumnName), 2147483647)
FROM YourTable;
CHARINDEX 関数は部分文字列の位置を検出し、その結果が SUBSTRING の 2 番目の引数として使用されます。length 引数は最大int
値に設定され、文字列の末尾までの残りのすべての文字が返されるようにします。(正確な数を計算する必要はありません。)部分文字列が見つからない場合、CHARINDEX は 0 を返します。このコンテキストでは、開始位置として 0 を指定すると、文字列値全体が返されます。
実際に反対のことをしたい場合、つまり、先頭のテキストを保持して残りを削除したい場合は、コメントの 1 つが暗示しているように思われますが、CHARINDEX とLEFTを次のように使用してみてください。
SELECT LEFT(ColumnName, CHARINDEX('To Find a', ColumnName + 'To Find a') - 1)
FROM YourTable;
ここでも、CHARINDEX は'To Find a'
列値の位置を返します。1 を引いた後、LEFT の長さの引数になります。CHARINDEX が検索用語を確実に見つけるために、その用語が検索対象の値に追加されます。元の値に が含まれていない場合'To Find a'
、CHARINDEX は追加されたビットにヒットし、元の文字列の最後の文字の後の位置を返します。減算すると、文字列の正確な長さになります。
SQL Server で先頭のテキストを選択するには:
DECLARE @String AS VARCHAR(255) = 'Some Text, Some More Text…To Find a… Some More Text'
SELECT LEFT(@String,CHARINDEX('To Find a',@String)-1)
(質問で述べたように、文字列が一貫して存在すると仮定します)
先頭のテキストを削除するには:
DECLARE @String AS VARCHAR(255) = 'Some Text, Some More Text…To Find a… Some More Text'
SELECT RIGHT(@String,CHARINDEX(REVERSE('To Find a'),REVERSE(@String))-1)
「To Find a」を保持したい場合-1
は、クエリの末尾近くを調整します。
アップデート:
「to find a」がすべての文字列に含まれているわけではなく、テーブルを使用している場合:
SELECT CASE WHEN CHARINDEX('To Find a',YourField) > 0
THEN LEFT(YourField,CHARINDEX('To Find a',YourField)-1)
ELSE YourField
END AS 'FixedField'
FROM YourTable