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

与 一样LIKE,如果要指定一字符中的一个字符应该匹配,请使用[]括起来。

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

Although, personally, given the descriptions of the function and parameters, I'd add the %[ and ]% in StripSpecs, and let the caller just give a list of characters (if you don't want to support any other type of pattern being specified)

于 2013-01-18T15:11:43.050 回答