Czy istnieje biblioteka wyrażeń regularnych napisana w języku T-SQL (bez środowiska CLR, bez rozszerzonego SP
, czystego języka T-SQL) dla programu SQL Server, która powinna działać w przypadku hostingu współdzielonego?
Edytować:
- Dzięki, wiem o
PATINDEX
,LIKE
,xp_
sps
oraz rozwiązania CLR - Wiem też, że to nie jest najlepsze miejsce na regex, pytanie jest teoretyczne :)
- Dopuszczalna jest również ograniczona funkcjonalność
sql-server
regex
tsql
xnagyg
źródło
źródło
SAFE
i nie oznaczonych jako alboEXTERNAL_ACCESS
lubUNSAFE
(ponieważ rozumiem, dlaczego te 2 ostatnie zestawy uprawnień byłyby problematyczne w przypadku współdzielonego środowiska hostingu). Microsoft Azure SQL Database V12 (tj. Nowa wersja z końca 2014 r.), Która jest środowiskiem współdzielonym, zezwala na zestawy oznaczone jakoSAFE
(i ładowane za pośrednictwemFROM 0x...
zamiast z biblioteki DLL, ponieważ nie można przesłać biblioteki DLL). AleSAFE
to wszystko, czego potrzeba do wyrażeń regularnych i WIELE innych bardzo przydatnych funkcji.Odpowiedzi:
A co z funkcją PATINDEX ?
Dopasowywanie wzorców w TSQL nie jest pełną biblioteką wyrażeń regularnych, ale zapewnia podstawy.
(Z Books Online)
źródło
LIKE
obsługuje wszystko, coPATINDEX
robi. Nie wiem o tym wcześniej ...%
dopasowuje 0 lub więcej znaków (niezależnie),[...]
dopasowuje tylko jeden i nie ma nic pomiędzy.Jeśli ktoś jest zainteresowany używaniem wyrażenia regularnego z CLR, oto rozwiązanie. Funkcja poniżej (C # .net 4.5) zwraca 1, jeśli wzorzec jest dopasowany, i 0, jeśli wzorzec nie jest dopasowany. Używam go do oznaczania linii w zapytaniach podrzędnych. Atrybut funkcji SQL informuje serwer sql, że ta metoda jest faktycznym UDF, którego będzie używał serwer SQL. Zapisz plik jako dll w miejscu, do którego masz dostęp z Management Studio.
W studiu zarządzania zaimportuj plik dll przez programowalność - zestawy - nowy zespół
Następnie uruchom to zapytanie:
Następnie powinieneś mieć pełny dostęp do funkcji za pośrednictwem bazy danych, w której zapisałeś zestaw.
Następnie użyj w zapytaniach takich jak:
źródło
Istnieje kilka podstawowych dopasowań wzorców dostępnych za pomocą funkcji LIKE, gdzie% pasuje do dowolnej liczby i kombinacji znaków, _ pasuje do dowolnego znaku, a [abc] może dopasować a, b lub c ... Więcej informacji można znaleźć w witrynie MSDN .
źródło
Jeśli korzystasz z SQL Server 2016 lub nowszego, możesz używać
sp_execute_external_script
razem z R. Ma funkcje do wyszukiwania wyrażeń regularnych, takie jakgrep
igrepl
.Oto przykład adresów e-mail. Zapytam kilka „osób” za pośrednictwem silnika bazy danych SQL Server, przekażę dane tych osób do R, pozwolę R zdecydować, które osoby mają nieprawidłowe adresy e-mail i pozwolę R przekazać z powrotem podzbiór osób do SQL Server. „Osoby” pochodzą z
[Application].[People]
tabeli w[WideWorldImporters]
przykładowej bazie danych. Są przekazywane do silnika języka R jako ramka danych o nazwieInputDataSet
. R używa funkcji grepl z operatorem „not” (wykrzyknik!), Aby znaleźć osoby, których adresy e-mail nie pasują do wzorca wyszukiwania ciągu RegEx.Zwróć uwagę, że odpowiednie funkcje muszą być zainstalowane na hoście SQL Server. W przypadku programu SQL Server 2016 nosi nazwę „Usługi SQL Server R”. W przypadku programu SQL Server 2017 jego nazwa została zmieniona na „SQL Server Machine Learning Services”.
Uwagi końcowe Implementacja SQL (T-SQL) firmy Microsoft nie obsługuje natywnej obsługi wyrażeń regularnych. To proponowane rozwiązanie może nie być bardziej pożądane dla OP niż użycie procedury składowanej CLR. Ale oferuje dodatkowy sposób podejścia do problemu.
źródło
Na wypadek, gdyby ktokolwiek jeszcze szukał tego pytania, http://www.sqlsharp.com/ to darmowy, łatwy sposób na dodanie funkcji CLR wyrażeń regularnych do bazy danych.
źródło
Za pomocą automatyzacji OLE można używać funkcji wyrażeń regularnych VBScript. Jest to o wiele lepsze niż obciążenie związane z tworzeniem i utrzymaniem zespołu. Upewnij się, że przejrzałeś sekcję komentarzy, aby uzyskać lepszą zmodyfikowaną wersję głównej.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Jeśli pojawi się
SQL Server blocked access to procedure 'sys.sp_OACreate'...
błąd, użyj,sp_reconfigure
aby włączyćOle Automation Procedures
. (Tak, niestety jest to zmiana na poziomie serwera!)Więcej informacji o
Test
metodzie znajduje się tutajMiłego kodowania
źródło