1

ここやインターネット上のどこかで見つけた関数を使用して、フィールドから不正な文字を削除しようとしています。

 Create Function [epacube].[StripSpecs](@myString varchar(500),
  @invalidChars varchar(100)) RETURNS varchar(500) AS Begin

   While PatIndex(@invalidChars, @myString) > 0
      Set @myString = Stuff(@myString, PatIndex(@invalidChars, @myString), 1, '')
   Return @myString End

私のテーブルでは、フィールド値を次のように設定しました: set DATA_NAME = 'Pro$d)uc^t'

このクエリを実行すると:

SELECT epacube.StripSpecs (
   DATA_NAME
  ,'%$%') FROM TABLE_DATA

それは機能し、Prod)uc^t の値が返されます

ただし、別の特殊文字を追加すると、機能しなくなります。

SELECT epacube.StripSpecs (
   DATA_NAME
  ,'%$)%') FROM TABLE_DATA

元の値 Pro$d)uc^t を返します

私がしなければならないことを達成するための提案はありますか?

編集 以下の回答に従って、機能したコードは次のとおりです。

Create Function [epacube].[StripSpecs](@myString varchar(500), @invalidChars varchar(100))
RETURNS varchar(500) AS
Begin

  While PatIndex('%[' + @invalidChars + ']%', @myString) > 0
    Set @myString = Stuff(@myString, PatIndex('%[' + @invalidChars + ']%', @myString), 1, '')
  Return @myString
End
4

1 に答える 1

0

と同様に、文字セットの 1 つが一致するLIKE必要があることを指定する場合は、 を使用してセットを囲みます。[]

SELECT epacube.StripSpecs (
   DATA_NAME
  ,'%[$)]%') FROM TABLE_DATA

ただし、個人的には、関数とパラメーターの説明を考慮して、 に%[and]%を追加しStripSpecs、呼び出し元に文字のリストを与えるだけにします (他のタイプのパターンの指定をサポートしたくない場合)。

于 2013-01-18T15:11:43.050 に答える