使用PATINDEX删除字符

时间:2013-01-18 15:08:05

标签: sql-server user-defined-functions

我正在使用我在此处找到的功能,而在互联网上尝试从字段中删除非法字符。

 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

1 个答案:

答案 0 :(得分:0)

LIKE一样,如果您要指定其中一个 set 字符应匹配,请使用[]将该字符集括起来。

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

虽然,就个人而言,考虑到功能和参数的描述,我会在%[中添加]%StripSpecs,然后让来电者给出一个字符列表(如果您不想支持指定的任何其他类型的模式)