2010-11-05 18 views
6

¿Cuál es el equivalente SQL Server de la expresión MySQL a continuación?MySQL REGEXP to SQL Server

... WHERE somefield REGEXP '^[[:blank:]]*ASD[[:blank:]]*$|^[[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*$|[[.vertical-line.]][[:blank:]]*ASD[[:blank:]]*[[.vertical-line.]]' 
+0

posible duplicado de [Expresiones regulares en servidores SQL Server?] (Http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers) –

+1

No estoy específicamente buscando expresiones regulares en MSSQL, solo quiero una expresión equivalente. – akosch

+0

Marque esta publicación: http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers Espero que esto ayude. – Hal

Respuesta

3

Desafortunadamente el apoyo de expresiones regulares en mssql es terrible, el operador más cercano es "similar" a la que se pierde en la funcionalidad de expresiones regulares de por una milla. Tendría que considerar dividir la expresión regular en múltiples sentencias similares y, probablemente, hacer alguna manipulación sucia de cadenas para emular lo que está intentando lograr.

Por ejemplo, si bien podíamos replicar [[: blank:]] con [] (leer [Pestaña de espacio]) no podemos forzar la coincidencia de cero o más de ellos, por lo que debemos quitarlos de la expresión pero esto coincidiría con 'ASD', por lo que necesitamos probar la presencia de ASD en la cadena no modificada.

Creo que lo siguiente reemplazará a tu expresión regular, pero se juntaron rápidamente así que pruébala con cuidado.

replace(replace(somefield,' ',''),' ','') in ('ASD','|ASD','|ASD|','ASD|') 
and 
somefield like '%ASD%' 

Nuevamente en mis declaraciones de sustitución, uno es un espacio y el otro una pestaña.