これはうまくいくはずです...置き換えを使用して、エスケープする問題を回避します。
declare @stringtobetested1 varchar(64) = 'abc#D-EF'
declare @stringtobetested2 varchar(64) = 'abc*def '
select
@stringtobetested1 string1
,replace(replace(replace(replace(@stringtobetested1,'''','#'),' ','#'),'/','#'),'.','#') string1changed
,@stringtobetested2 string2
,replace(replace(replace(replace(@stringtobetested2,'''','#'),' ','#'),'/','#'),'.','#') string2changed
,patindex('%[^A-Z0-9a-z#-]%',replace(replace(replace(replace(@stringtobetested1,'''','#'),' ','#'),'/','#'),'.','#'))
,patindex('%[^A-Z0-9a-z#-]%',replace(replace(replace(replace(@stringtobetested2,'''','#'),' ','#'),'/','#'),'.','#'))
ネストされた4つの置換は、文字列ごとに最大4つの文字を処理できることを意味しますか? –
私はちょうど特殊文字を#で置き換えています...それは1#または7# – scsimon
が存在するかどうかに関係なく渡されます、なぜそれらは入れ子ですか? –