我正在使用我在网上找到的一个函数来尝试从一个字段中删除非法字符。
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在我的表中,我将字段值设置为: 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发布于 2013-01-18 15:11:43
与LIKE一样,如果您希望指定一组字符中的一个应该匹配,请使用[]将该集合括起来。
SELECT epacube.StripSpecs (
DATA_NAME
,'%[$)]%') FROM TABLE_DATA尽管就个人而言,考虑到函数和参数的描述,我会在%[和]%中添加StripSpecs,并让调用者只给出一个字符列表(如果您不想支持指定的任何其他类型的模式)
https://stackoverflow.com/questions/14401740
复制相似问题