1

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

SELECT * FROM mytable WHERE title LIKE @param;

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

@param 中除 [az][AZ][0-9][-] 之外的任何字符都被替换为“-”,因此无法逆转这一点。(该值来自一个 SEO 友好的 url)

可能的标题值的示例以及它们的外观:

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

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

正则表达式将是完美的。

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

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

有什么建议么?

4

2 回答 2

3

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

此处可下载 RegEx SQL CLR的源代码。

于 2010-12-26T15:17:42.047 回答
1

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

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

一个微小的区别是下划线匹配 A-Z0-9 而你的破折号不匹配。

于 2010-12-26T17:20:54.430 回答