0

一貫した既知の部分文字列 ("To Find a") の前にあるすべての単語を削除しようとしています。「To Find a」の前の文字列を 600 個以上まとめて削除したいと考えていDescriptionます。この部分文字列の前の単語は、すべての場合で異なります。たとえば ( Description「いくつかのテキスト、いくつかのテキスト…検索するには…もっと多くのテキスト」) 私は他のいくつかの投稿を赤くしており、TRIM、CHARINDEX、および SUBSTRING_INDEX を使用してみました。助けてくれてありがとう!

4

2 に答える 2

0

これが SQL Server の場合、先頭のビットを削除する比較的簡単な方法は、SUBSTRINGCHARINDEXを使用することです。

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 は追加されたビットにヒットし、元の文字列の最後の文字の後の位置を返します。減算すると、文字列の正確な長さになります。

于 2013-09-10T22:14:53.473 に答える
0

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
于 2013-09-06T17:16:02.680 に答える