2017-09-07 15 views
-3

MS T-SQLは正規表現をサポートしていないことを完全に認識していますが、私のプロジェクトには同様の機能が必要です。私はデータを抽出し、外部で操作してテーブルに再挿入するオプションがないので、SQL REPLACEステートメントを使用しようとしています。T-SQLのワイルドカードを置換のために使用

私の問題は、以下の通りである:私のSQLテーブルでは、私はこのようなものを保存するテキストフィールドを持っている:「いくつかの文字が^ & 20^& 20 ^一部の文字が^ & 3^& 3 ^一部の文字^ & 134^^ -characters間& 134 ^一部の文字^ & 20^& 20 ^一部の文字^ & 134^& 134 ^一部の文字... "

今、私はすべての数字1を交換してみてください... 499(のような^ & 20^& 20 ^および^ & 3^& 3 ^および^ & 134^& 134 ^等)^ & 500^& 500^ これはどのようにSQLで実現できますか。どんな助けもありがたい。

ありがとうございます。

+0

改善のためのヒントについては、[こちら](http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)をお読みください。質問。適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。 'tsql'は選択肢を絞り込みますが、データベースは指定しないことに注意してください。 – HABO

答えて

0

あなたはテキストを置き換えるものが明確ではありませんでした。この解決策は、あなたが500以下の数字を置き換えることを考えていると仮定します。^ & 11 ^私は変数を作成したので(@replaceTxt)、あなたは結果を使いこなすことができます。私の解決策はpatternSplitCMです。

declare @string varchar(8000) = 
'blah blah blah... ^&20^&20^ ...my phone number is 555-1234 some characters ^&3000^&3000^ some characters ^&134^&134^ some characters ^&20^&20^... with the same string ^&600^&600^...'; 
declare @replaceTxt varchar(50) = '555'; 

select newstring = 
(
select --ps.*, 
    case when matched = 1 and 
     (charindex('^', ps.item)*charindex('&', ps.item)*patindex('%[0-9]%', ps.item)) <> 0 
    then 
    replace((
     select case when cast(item as int) < 500 then '^&'[email protected]+'^' else '^&'+item+'^' end 
     from dbo.PatternSplitCM(ps.item, '[0-9]') 
     where [Matched]=1 for xml path(''), type).value('.', 'varchar(8000)'), '^^', '^') 
    else item end +'' 
from dbo.PatternSplitCM(@string, '[0-9&^]') ps 
order by ps.ItemNumber 
for xml path(''), type 
).value('.', 'varchar(8000)'); 

結果:

blah blah blah... ^&555^&555^ ...my phone number is 555-1234 some characters ^&3000^&3000^ some characters ^&555^&555^ some characters ^&555^&555^... with the same string ^&600^&600^... 

編集:いないすべての数字は、このソリューションで変更されていることを示すために、サンプルデータに電話番号が含まれています。

+0

素早くお答えいただき、ありがとうございます。私の仕事環境はMS SQL Server 2012です。 ソース文字列は、使用した文字列のようです: 'blah blah blah ... ^&20 ^&20^...私の電話番号は555-1234文字です^&3000 ^&3000 ^いくつかの文字^&134 ^&134 ^と同じ文字列^&20 ^&20^...と同じ文字列^&600 ^&600^... ' この文字列では、すべての出現の出現: '^&[0-9] ^&[0-9] ^' '^&[0-9] [0-9] ^&[0-9] [0- ^&[0-9] ^&[0-9] [0-9] [0-9]^' ' ^&[0-9]^' ' ^&[0-9] [0-9] ] [0-9] [0-9] [0-9] ^&[0-9] [0-9] [0-9] [0-9]^' は' ^&500 ^&500^' – Dorothea

+0

最初にpatternSplitCM(ループベースのソリューション/ PatternSplitLoop)からエラーが発生しましたが、間違った復帰がありました(以下、@ String = CASE ...) そのpatternSplitCMに誤りがないことを確認した後。 あなたのソリューションをpatternSplitCMと組み合わせることができましたが、今は次のエラーが発生します: – Dorothea

関連する問題