2017-09-21 5 views
1

文字列を取り、[alpha character]"のすべてのインスタンスを[alpha character] Inchに置き換えようとしています。たとえば、文字列4" sticker4 Inch stickerになりますが、文字列My "Loving" Brotherは変更されません。SQL Server:アルファの前に特殊文字を置き換えます。

REPLACE(@String, '"', ' Inch')を使って直接置き換えることができますが、2番目の例は変更されません。前の値がアルファ(a-Z)値の場合にのみ、この特殊文字を置き換えるにはどうすればよいですか?

私は助けていただきありがとうございます!

+0

を置き換えます"すべてのインスタンス"ので、もしあなたが '4" x2 "ステッカーブックは何もなかった変わった?だから実際には、値が1回しか変わらない場合は値を変更したいだけですか?ルールはあまりにも私の本のあいまいさのために開いています。たぶん... http://rextester.com/IFC94069しかし、len(src)-len(replace(src、 '"'、 ''))= 1の場合は、' src '、' 、 'インチ') else src end' – xQbert

+0

これは正しいです。あなたの例のようなエッジケースを説明するのは間違いなく良いでしょうが、単純なケースを達成する方法を理解すれば、残りの部分をどのように構築するかを考え出すことができます。私はあなたの(または他の誰かの)時間を、必要以上に無駄にしたくありませんでした。 – AliceSmith

答えて

2

簡単に表値関数またはスカラー値に変換することができる。さらに別の選択肢、値関数

Declare @S varchar(max) = 'The "bid" was for 8'' 12"' 

Select @S = Replace(@S,MapFrom,MapTo) 
From (
     Select MapFrom = concat(n,MapFrom) 
       ,MapTo = concat(n,MapTo) 
     From (values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) N(N) 
     Cross Join (values ('''',' Feet'),('"',' Inch')) C(MapFrom,MapTo)   
    ) A 

Select @S 

戻り

The "bid" was for 8 Feet 12 Inch 

ただ単に "ダイナミック" のシリーズを実行している、サブクエリは、次のように生成ビジュアル

を支援する

enter image description here

1

あなたはこのように、再帰CTEでそれを行うことができます。

declare @InputString varchar(100) 
set @InputString = '2"x4" picture frame "Love"' 
;with a as(select convert(varchar(max),@InputString) i, convert(int, PATINDEX('%[0-9]"%', @InputString)) p 
union all 
select stuff(i, p+1, 1, ' Inch') i, convert(int, PATINDEX('%[0-9]"%', stuff(i, p+1, 1, ' Inch'))) p 
from a where PATINDEX('%[0-9]"%', i) > 0) 
select * from a 
where p = 0 

結果:

2 Inchx4 Inch picture frame "Love" 
関連する問題