Gibt es eine in T-SQL geschriebene Bibliothek für reguläre Ausdrücke (keine CLR, keine erweiterte SP
, reine T-SQL) für SQL Server, die mit Shared Hosting funktionieren sollte?
Bearbeiten:
- Danke, weiß ich
PATINDEX
,LIKE
,xp_
sps
und CLR - Lösungen - Ich weiß auch, dass es nicht der beste Ort für Regex ist, die Frage ist theoretisch :)
- Reduzierte Funktionalität wird ebenfalls akzeptiert
sql-server
regex
tsql
xnagyg
quelle
quelle
SAFE
oder nicht alsEXTERNAL_ACCESS
oder gekennzeichnet sindUNSAFE
(da ich verstehe, warum diese beiden letztgenannten Berechtigungssätze für eine gemeinsam genutzte Hosting-Umgebung problematisch wären). Microsoft Azure SQL Database V12 (dh die neue Version ab Ende 2014), bei der es sich um eine gemeinsam genutzte Umgebung handelt, ermöglicht Assemblies, die als gekennzeichnet sindSAFE
(und überFROM 0x...
statt aus einer DLL geladen werden, da Sie keine DLL hochladen können). AberSAFE
ist alles, was für reguläre Ausdrücke und viele andere sehr nützliche Funktionen benötigt wird.Antworten:
Wie wäre es mit der PATINDEX- Funktion?
Der Pattern Matching in TSQL ist keine vollständige Regex-Bibliothek, bietet Ihnen jedoch die Grundlagen.
(Aus Online-Büchern)
quelle
LIKE
wird alles unterstützt, wasPATINDEX
funktioniert. Ich weiß es vorher nicht ...%
Entspricht 0 oder mehr Zeichen (unabhängig davon),[...]
Entspricht nur einem, und es liegt nichts dazwischen.Wenn jemand daran interessiert ist, Regex mit CLR zu verwenden, ist hier eine Lösung. Die folgende Funktion (C # .net 4.5) gibt eine 1 zurück, wenn das Muster übereinstimmt, und eine 0, wenn das Muster nicht übereinstimmt. Ich benutze es, um Zeilen in Unterabfragen zu markieren. Das SQLfunction-Attribut teilt dem SQL Server mit, dass diese Methode die tatsächliche UDF ist, die der SQL Server verwendet. Speichern Sie die Datei als DLL an einem Ort, an dem Sie von Management Studio aus darauf zugreifen können.
Im Management Studio importieren Sie die DLL-Datei über Programmierbarkeit - Assemblys - neue Assembly
Führen Sie dann diese Abfrage aus:
Dann sollten Sie über die Datenbank, in der Sie die Assembly gespeichert haben, vollständigen Zugriff auf die Funktion haben.
Verwenden Sie dann in Abfragen wie folgt:
quelle
Durch die Verwendung von LIKE ist ein grundlegender Mustervergleich verfügbar, bei dem% mit einer beliebigen Anzahl und Kombination von Zeichen übereinstimmt, _ mit einem beliebigen Zeichen übereinstimmt und [abc] mit a, b oder c übereinstimmen kann. Weitere Informationen finden Sie auf der MSDN-Site .
quelle
Wenn Sie SQL Server 2016 oder höher verwenden, können Sie es
sp_execute_external_script
zusammen mit R verwenden. Es verfügt über Funktionen für die Suche nach regulären Ausdrücken, wie z. B.grep
undgrepl
.Hier ist ein Beispiel für E-Mail-Adressen. Ich werde einige "Personen" über das SQL Server-Datenbankmodul abfragen, die Daten für diese Personen an R übergeben, R entscheiden lassen, welche Personen ungültige E-Mail-Adressen haben, und R diese Teilmenge von Personen an SQL Server zurückgeben lassen. Die "Personen" stammen aus der
[Application].[People]
Tabelle in der[WideWorldImporters]
Beispieldatenbank. Sie werden als benannter Datenrahmen an die R-Engine übergebenInputDataSet
. R verwendet die grepl-Funktion mit dem Operator "not" (Ausrufezeichen!), Um herauszufinden, welche Personen E-Mail-Adressen haben, die nicht mit dem RegEx-Zeichenfolgensuchmuster übereinstimmen.Beachten Sie, dass die entsprechenden Funktionen auf dem SQL Server-Host installiert sein müssen. Für SQL Server 2016 heißt es "SQL Server R Services". Für SQL Server 2017 wurde es in "SQL Server Machine Learning Services" umbenannt.
Abschließende Gedanken Die Implementierung von SQL (T-SQL) durch Microsoft bietet keine native Unterstützung für RegEx. Diese vorgeschlagene Lösung ist für das OP möglicherweise nicht wünschenswerter als die Verwendung einer gespeicherten CLR-Prozedur. Es bietet jedoch eine zusätzliche Möglichkeit, sich dem Problem zu nähern.
quelle
Falls sich noch jemand mit dieser Frage befasst, ist http://www.sqlsharp.com/ eine kostenlose und einfache Möglichkeit, CLR-Funktionen für reguläre Ausdrücke in Ihre Datenbank aufzunehmen.
quelle
Sie können VBScript-Funktionen für reguläre Ausdrücke mithilfe von OLE Automation verwenden. Dies ist weitaus besser als der Aufwand für das Erstellen und Verwalten einer Baugruppe. Bitte gehen Sie den Kommentarbereich durch, um eine besser modifizierte Version der Hauptversion zu erhalten.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Wenn Sie eine
SQL Server blocked access to procedure 'sys.sp_OACreate'...
Fehlermeldung erhalten,sp_reconfigure
aktivieren Sie diese OptionOle Automation Procedures
. (Ja, leider ist das eine Änderung der Serverebene!)Weitere Informationen zur
Test
Methode finden Sie hierViel Spaß beim Codieren
quelle