Microsoft SQL Serverは、ワイルドカードを使用して何らかのreplace
関数をネイティブでサポートしていますか?正規表現がネイティブで利用できないことを収集します。
ソリューションを結合するために使用できるPATINDEX
関数があることに注意してください。もっと簡単にできることはありますか?
たとえば、x
またはy
をq
に置き換えるには、REPLACE(data,'[xy]','q')
を使用します。
REPLACE
組み込み関数は、パターンまたはワイルドカードをサポートしていません。 LIKE
とPATINDEX
のみが行います。
質問に示されているように本当に単純な単一文字の置換が本当に必要であると仮定すると、次のように、REPLACE
を2回呼び出すことができます。
SELECT REPLACE(
REPLACE('A B x 3 y Z x 943 yy!',
'x',
'q'),
'y',
'q');
戻り値:
A B q 3 q Z q 943 qq!
より複雑なパターンマッチング/置換が必要な場合は、SQLCLRを介してのみ実行できる正規表現を介して行う必要があります。 SQL# SQLCLRライブラリ(私が書いた)の無料バージョンでは、いくつかのSQLCLR RegEx関数を使用できます。そのうちの1つはRegEx_Replace[4k]()
です(4k
バージョンは、 4000文字を超える文字は必要ないため、NVARCHAR(MAX)
を入力パラメーターまたは戻り値として使用しないことで、パフォーマンスを向上させることができます。
ネストされた2つのREPLACE
呼び出しに相当することは、次のように行われます(質問に示されているパターン構文を使用します)。
SELECT SQL#.RegEx_Replace4k(N'A B x 3 y Z x 943 yy!', N'[xy]', N'q', -1, 1, NULL);
戻り値:
A B q 3 q Z q 943 qq!
ただし、T-SQLでは簡単に実行できない、より複雑なパターンの可能性について話しているため、パターンで数量詞を使用して、連続するx
またはy
文字を任意の数の単一のq
に置き換えることができます。 :
SELECT SQL#.RegEx_Replace4k(N'A B x 3 y Z xx 943 yyxxyxy!', N'[xy]+', N'q', -1, 1, NULL);
戻り値:
A B q 3 q Z q 943 q!
入力文字列が前の2つの例から少し変更されて、x
の後にZ
を追加し、最後にxxyxy
をyy
に追加することに注意してください。また、どちらの場合も、複数文字のフラグメントは単一のq
に置き換えられました。
文字列と照合の操作の詳細については、次のサイトをご覧ください。 照合情報
上記のCaMからの回答はポスターの質問には回答しませんが、エクスポートパスを標準化する必要がある状況で役立ちました(エクスポートパスはD:\ mypath E:\ mypathまたは10.10.10.128\C $ \の場合があります) mypath etc ...)多分それは他の誰かを助けるでしょう
-- standardize output paths
UPDATE dbo.ELDPdf
SET OutputPath = SUBSTRING(OutputPath, PATINDEX('%$%', OutputPath)+2,1000)
WHERE JobSummaryId = @JobSummaryId
AND OutputPath LIKE '%$%'
UPDATE dbo.ELDPdf
SET OutputPath = SUBSTRING(OutputPath, PATINDEX('%:%', OutputPath)+2,1000)
WHERE JobSummaryId = @JobSummaryId
AND OutputPath LIKE '%:\%'
この投稿: https://stackoverflow.com/questions/13253259/sql-server-replace-command-with-wildcard はかなり似ているようで、このリンクを参照しています: https:// stackoverflow .com/questions/150977/perform-regex-replace-in-an-sql-query
別のオプションは次のようなものです
UPDATE myTable
SET myField = LEFT(myField, PATINDEX('%Z%', myField))
WHERE myField LIKE '%X%'
OR myField LIKE '%Y%'