Existe alguma biblioteca de expressão regular escrita em T-SQL (sem CLR, sem SP
T-SQL estendido e puro) para SQL Server e que funcione com hospedagem compartilhada?
Editar:
- Obrigado, eu sei sobre
PATINDEX
,LIKE
,xp_
sps
e soluções CLR - Eu também sei que não é o melhor lugar para regex, a questão é teórica :)
- Funcionalidade reduzida também é aceita
sql-server
regex
tsql
xnagyg
fonte
fonte
SAFE
e não marcados como umEXTERNAL_ACCESS
ou outroUNSAFE
(como eu entendo por que esses dois últimos conjuntos de permissões seriam problemáticos para um ambiente de hospedagem compartilhada). O Banco de Dados SQL do Microsoft Azure V12 (ou seja, a nova versão a partir do final de 2014), que é um ambiente compartilhado, permite Assemblies marcados comoSAFE
(e carregados por meioFROM 0x...
de uma DLL, pois não é possível carregar uma DLL). MasSAFE
é tudo o que é necessário para expressões regulares e muitas outras funções muito úteis.Respostas:
E a função PATINDEX ?
A correspondência de padrões no TSQL não é uma biblioteca completa de expressões regulares, mas fornece o básico.
(De livros on-line)
fonte
LIKE
oferece suporte a tudo o quePATINDEX
faz. Não sei sobre antes disso ...%
corresponde a 0 ou mais caracteres (independentemente),[...]
corresponde a apenas um e não há nada no meio.Se alguém estiver interessado em usar regex com CLR, aqui está uma solução. A função abaixo (C # .net 4.5) retorna 1 se o padrão for correspondido e 0 se o padrão não for correspondido. Eu o uso para marcar linhas em subconsultas. O atributo SQLfunction informa ao sql server que esse método é o UDF real que o SQL server usará. Salve o arquivo como uma DLL em um local onde você possa acessá-lo no Management Studio.
No management studio, importe o arquivo dll via programabilidade - assemblies - new assembly
Em seguida, execute esta consulta:
Então você deve ter acesso completo à função através do banco de dados em que armazenou o assembly.
Em seguida, use em consultas como:
fonte
Existe alguma correspondência básica de padrões disponível através do uso de LIKE, onde% corresponde a qualquer número e combinação de caracteres, _ corresponde a qualquer caractere e [abc] pode corresponder a, b ou c ... Há mais informações no site do MSDN .
fonte
Se você estiver usando o SQL Server 2016 ou superior, poderá usar
sp_execute_external_script
junto com o R. Ele possui funções para pesquisas de Expressão Regular, comogrep
egrepl
.Aqui está um exemplo para endereços de email. Vou consultar algumas "pessoas" por meio do mecanismo de banco de dados do SQL Server, passar os dados para essas pessoas para R, deixar R decidir quais pessoas têm endereços de email inválidos e fazer com que R repasse esse subconjunto de pessoas para o SQL Server. As "pessoas" são da
[Application].[People]
tabela no[WideWorldImporters]
banco de dados de exemplo. Eles são passados para o mecanismo R como um dataframe nomeadoInputDataSet
. R usa a função grepl com o operador "not" (ponto de exclamação!) Para descobrir quais pessoas têm endereços de email que não correspondem ao padrão de pesquisa de cadeia de caracteres RegEx.Observe que os recursos apropriados devem ser instalados no host do SQL Server. Para o SQL Server 2016, ele é chamado de "SQL Server R Services". Para o SQL Server 2017, ele foi renomeado para "SQL Server Machine Learning Services".
Considerações finais A implementação do SQL (T-SQL) da Microsoft não tem suporte nativo para o RegEx. Essa solução proposta pode não ser mais desejável para o OP do que o uso de um procedimento armazenado CLR. Mas oferece uma maneira adicional de abordar o problema.
fonte
Caso outra pessoa ainda esteja estudando essa questão, http://www.sqlsharp.com/ é uma maneira fácil e gratuita de adicionar funções CLR de expressão regular ao seu banco de dados.
fonte
Você pode usar os recursos de expressão regular do VBScript usando a automação OLE. Isso é muito melhor do que a sobrecarga de criar e manter uma montagem. Por favor, verifique a seção de comentários para obter uma versão melhorada da versão principal.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Se você receber um
SQL Server blocked access to procedure 'sys.sp_OACreate'...
erro, usesp_reconfigure
para ativarOle Automation Procedures
. (Sim, infelizmente, isso é uma alteração no nível do servidor!)Mais informações sobre o
Test
método estão disponíveis aquiFeliz codificação
fonte