SQL Server:替换SQL字符串中的所有特殊字符

时间:2010-12-26 15:08:14

标签: sql-server regex sql-server-2005 replace whitelist

我正在使用SQL Server 2005.我需要从表中选择与给定参数具有相同字符串的所有行。

SELECT * FROM mytable WHERE title LIKE @param;

唯一的问题是标题列可能包含已在比较的@param中用' - '替换的特殊字符。

除了[a-z] [A-Z] [0-9] [ - ]之外的@param中的任何字符都被' - '替换,所以没有办法改变它。 (价值来自SEO友好网址)

可能的标题值示例及其外观:

"Adobe Acrobat" -> "Adobe-Acrobat"  
"A+® Certification" -> "A-Certification"

我不能使用SQL REPLACE()函数,因为我需要一个chars的白名单机制。标题栏中可能有非常特殊的字符,我无法预测。

正则表达式将是完美的。

我现在搜索了2天但是找不到一种简单有效的方法在T-SQL中实现它。

我可以获取所有行并在客户端代码中进行过滤,但这对我来说似乎不是一个很好的解决方案。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果您使用的是SQL Server 2005及更高版本,则可以使用SQL CLR函数在SQL Server中有效地使用正则表达式。

可以下载RegEx SQL CLR here,包含源代码。

答案 1 :(得分:1)

你基本上使用-(短划线)作为任何角色的通配符。对于SQL的like语句,任何字符的通配符都是_(下划线)。所以也许你可以尝试用下划线替换dash。例如:

where 'A+® Certification' like replace('A---Certification','-','_')

一个微小的区别是下划线与A-Z0-9匹配,而破折号则没有。