¿Existe alguna biblioteca de expresiones regulares escrita en T-SQL (sin CLR, no extendida SP
, T-SQL puro) para SQL Server, y eso debería funcionar con hosting compartido?
Editar:
- Gracias, lo que sé de
PATINDEX
,LIKE
,xp_
sps
y soluciones CLR - También sé que no es el mejor lugar para expresiones regulares, la pregunta es teórica :)
- También se acepta una funcionalidad reducida.
sql-server
regex
tsql
xnagyg
fuente
fuente
SAFE
y no marcadas comoEXTERNAL_ACCESS
oUNSAFE
(ya que entiendo por qué esos 2 últimos Conjuntos de permisos serían problemáticos para un entorno de alojamiento compartido). Microsoft Azure SQL Database V12 (es decir, la nueva versión a finales de 2014), que es un entorno compartido, permite ensamblados marcados comoSAFE
(y cargados a través de, enFROM 0x...
lugar de desde un archivo DLL, ya que no puede cargar un archivo DLL). PeroSAFE
es todo lo que se necesita para las expresiones regulares y MUCHAS otras funciones muy útiles.Respuestas:
¿Qué tal la función PATINDEX ?
La coincidencia de patrones en TSQL no es una biblioteca de expresiones regulares completa, pero le brinda los conceptos básicos.
(De los libros en línea)
fuente
LIKE
ha admitido todo lo quePATINDEX
hace. No sé antes de eso ...%
coincide con 0 o más caracteres (independientemente),[...]
coincide con solo uno y no hay nada en el medio.Si alguien está interesado en usar expresiones regulares con CLR, aquí hay una solución. La siguiente función (C # .net 4.5) devuelve un 1 si el patrón coincide y un 0 si el patrón no coincide. Lo uso para etiquetar líneas en subconsultas. El atributo SQLfunction le dice al servidor SQL que este método es el UDF real que usará el servidor SQL. Guarde el archivo como un archivo DLL en un lugar donde pueda acceder desde el estudio de administración.
En Management Studio, importe el archivo dll a través de programabilidad - ensamblados - nuevo ensamblaje
Luego ejecute esta consulta:
Entonces debe tener acceso completo a la función a través de la base de datos en la que almacenó el ensamblado.
Luego, use en consultas como esta:
fuente
Hay algunas coincidencias de patrones básicos disponibles mediante el uso de LIKE, donde% coincide con cualquier número y combinación de caracteres, _ coincide con cualquier carácter y [abc] podría coincidir con a, b o c ... Hay más información en el sitio de MSDN .
fuente
Si está utilizando SQL Server 2016 o superior, puede usarlo
sp_execute_external_script
junto con R. Tiene funciones para búsquedas de Expresión regular, comogrep
ygrepl
.Aquí hay un ejemplo para las direcciones de correo electrónico. Consultaré a algunas "personas" a través del motor de base de datos de SQL Server, pasaré los datos de esas personas a R, dejaré que R decida qué personas tienen direcciones de correo electrónico no válidas y que R devuelva ese subconjunto de personas a SQL Server. Las "personas" son de la
[Application].[People]
tabla en la[WideWorldImporters]
base de datos de muestra. Se pasan al motor R como un marco de datos llamadoInputDataSet
. R usa la función grepl con el operador "no" (¡signo de exclamación!) Para encontrar qué personas tienen direcciones de correo electrónico que no coinciden con el patrón de búsqueda de cadenas RegEx.Tenga en cuenta que las características apropiadas deben instalarse en el host de SQL Server. Para SQL Server 2016, se llama "SQL Server R Services". Para SQL Server 2017, se renombró a "Servicios de aprendizaje automático de SQL Server".
Reflexiones finales La implementación de Microsoft de SQL (T-SQL) no tiene soporte nativo para RegEx. Esta solución propuesta puede no ser más deseable para el OP que el uso de un procedimiento almacenado CLR. Pero sí ofrece una forma adicional de abordar el problema.
fuente
En caso de que alguien más siga analizando esta pregunta, http://www.sqlsharp.com/ es una forma fácil y gratuita de agregar funciones CLR de expresión regular en su base de datos.
fuente
Puede usar las características de expresión regular de VBScript usando la automatización OLE. Esto es mucho mejor que la sobrecarga de crear y mantener un ensamblaje. Asegúrese de pasar por la sección de comentarios para obtener una versión modificada mejor de la principal.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Si obtiene un
SQL Server blocked access to procedure 'sys.sp_OACreate'...
error, usesp_reconfigure
para habilitarOle Automation Procedures
. (Sí, desafortunadamente, ¡eso es un cambio de nivel del servidor!)Más información sobre el
Test
método está disponible aquíCodificación feliz
fuente