Expressões regulares em servidores do SQL Server?

É possível fazer consultas eficientes que usam o conjunto completo de resources de expressão regular.

Se não a Microsoft realmente deveria considerar esse recurso.

Para o SQL Server 2000 (e qualquer outra edição de 32 bits do SQL Server), há xp_pcre , que introduz expressões regulares compatíveis com Perl como um conjunto de stored procedures estendidos. Eu usei, funciona.

As versões mais recentes dão access direto às expressões regulares integradas do .NET (este link parece estar morto, aqui está outro: MSDN: Como: Trabalhar com Objetos de Banco de Dados do CLR ).

A resposta é não, não no caso geral, embora possa depender do que você entende por eficiente. Para esses propósitos, usarei a seguinte definição: ‘Faz uso efetivo de índices e junções em uma ordem sensata’ que provavelmente é tão boa quanto qualquer outra.

Nesse caso, as consultas ‘Efficient’ são ‘s-arg’-able, o que significa que elas podem usar pesquisas de índice para restringir predicados de pesquisa. Igualdades (t-joins) e desigualdades simples podem fazer isso. ‘E’ predicados também podem fazer isso. Depois disso, entramos em varredura de tabela, índice e intervalo – isto é, operações que têm que fazer comparações record-by-record (ou index-keyby index-key).

A resposta de Sontek descreve um método de alinhar a funcionalidade regexp em uma consulta, mas as operações ainda precisam fazer comparações em um registro por base de registro. Embrulhando-se em uma function permitiria um índice baseado em function, onde o resultado de um cálculo é materializado no índice (o Oracle suporta isso e você pode obter funcionalidade equivalente no SQL Server usando o tipo de truques discutidos neste artigo ). No entanto, você não pode fazer isso para um regexp arbitrário.

No caso geral, a semântica de uma expressão regular não se presta a podar conjuntos de correspondência da maneira que um índice faz, portanto, a integração do suporte ao rexegp ao otimizador de consulta provavelmente não é possível.

Confira isso e isso . Eles são ótimos posts sobre como fazer isso.

Eu adoraria ter a capacidade de chamar expressões regulares nativamente no SQL Server para consultas ad hoc e usar em stored procedures. Nossos DBA’s não nos permitirão criar funções CLR, então eu tenho usado o LINQ Pad como uma espécie de editor de consultas do pobre homem para coisas ad hoc. É especialmente útil ao trabalhar com dados estruturados, como JSON ou XML, que foram salvos no database.

E eu concordo que parece um descuido que não há suporte a expressões regulares, parece um recurso óbvio para uma linguagem de consulta. Espero que possamos vê-lo em uma versão futura, mas as pessoas têm perguntado por um longo tempo e ainda não entraram no produto.

A razão mais frequente que tenho visto é que uma expressão mal formada pode causar um retrocesso catastrófico que no .NET não aborta e quase sempre requer que a máquina seja reiniciada. Talvez, uma vez que eles resolvam isso no framework, nós o veremos incluído em uma versão futura do SQL Server.

Eu acho que podemos ver a partir dos novos tipos no SQL Server 2008 (hierarchyid, geo-spatial) que, se a Microsoft adicionar isso, virá na forma de um assembly SQL CLR

Se você conseguir instalar o Assemblies em seu database, poderá criar um novo projeto Database \ SQL Server no Visual Studio – isso permitirá que você crie um novo Trigger / UDF / Proc. / Agregado Armazenado ou UDT. Você pode importar System.Text.RegularExpressions para a class e ir de lá.

Espero que isto ajude