我正在使用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中实现它。
我可以获取所有行并在客户端代码中进行过滤,但这对我来说似乎不是一个很好的解决方案。
有什么建议吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
你基本上使用-
(短划线)作为任何角色的通配符。对于SQL的like
语句,任何字符的通配符都是_
(下划线)。所以也许你可以尝试用下划线替换dash。例如:
where 'A+® Certification' like replace('A---Certification','-','_')
一个微小的区别是下划线与A-Z0-9匹配,而破折号则没有。