是否可以使用完整的正则表达式功能集进行高效查询.
如果不是微软真的应该考虑这个功能.
对于SQL Server 2000(以及任何其他32位版本的SQL Server),有xp_pcre,它将Perl兼容的正则表达式作为一组扩展存储过程引入.我用它,它的工作原理.
更新的版本使您可以直接访问.NET集成的正则表达式(此链接似乎已经死了,这是另一个:MSDN:如何:使用CLR数据库对象).
答案是否定的,不是一般情况下,尽管它可能取决于你的效率是什么意思.出于这些目的,我将使用以下定义:'以合理的顺序有效地使用索引和连接',这可能与任何一个一样好.
在这种情况下,"高效"查询是's-arg'-able,这意味着他们可以使用索引查找来缩小搜索谓词的范围.平等(t-joins)和简单的不等式可以做到这一点.'AND'谓词也可以这样做.之后,我们进入表,索引和范围扫描 - 即必须按记录(或索引键)索引键进行比较的操作.
Sontek的回答描述了一种将regexp功能嵌入到查询中的方法,但操作仍然需要逐个记录地进行比较.将其包含在函数中将允许基于函数的索引,其中计算的结果在索引中具体化(Oracle支持这一点,您可以通过使用本文中讨论的那种技巧在SQL Server中获得等效的功能).但是,您无法为任意正则表达式执行此操作.
在一般情况下,正则表达式的语义不适合以索引的方式修剪匹配集,因此可能无法将rexegp支持集成到查询优化器中.