2010-11-05 15 views
6

Co to jest równoważnik SQL Server poniżej wyrażenia MySQL?MySQL REGEXP do 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

możliwy duplikat [Wyrażeń regularnych na serwerach SQL Server?] (Http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers) –

+1

Nie szukam wyrażeń regularnych w MSSQL, chcę tylko dowolnego równoważnego wyrażenia. – akosch

+0

Sprawdź ten wpis: http://stackoverflow.com/questions/267921/regular-expressions-in-sql-server-servers Mam nadzieję, że to pomoże. – Hal

Odpowiedz

3

Niestety regex wsparcie w MSSQL jest straszne, najbliższy operator jest „jak”, który zdobywa się na funkcjonalność regex poprzez mili. Będziesz musiał popatrzeć na podzielenie wyrażeń regularnych na wiele podobnych instrukcji i prawdopodobnie wykonanie brudnej manipulacji łańcuchami, aby emulować to, co próbujesz osiągnąć.

Na przykład, gdy możemy powielić [[: puste:]] za pomocą [] (przeczytaj [Zakładka miejsca]), nie możemy wymusić dopasowania zero lub więcej z nich, więc zamiast tego musimy usunąć je z wyrażenia, ale to pasuje do "ASD", więc musimy przetestować obecność ASD w niezmodyfikowanym łańcuchu.

Myślę, że następujące zastąpiłoby twoje wyrażenie regularne, ale zostało szybko zrzucone razem, przetestuj je dokładnie.

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

Znowu w instrukcjach zastępowania jeden jest spacją, a drugi tabulatorem.