Ist es möglich, effiziente Abfragen zu erstellen, die das vollständige Feature-Set für reguläre Ausdrücke verwenden?Reguläre Ausdrücke in SQL Server-Servern?
Wenn nicht sollte Microsoft wirklich diese Funktion berücksichtigen.
Ist es möglich, effiziente Abfragen zu erstellen, die das vollständige Feature-Set für reguläre Ausdrücke verwenden?Reguläre Ausdrücke in SQL Server-Servern?
Wenn nicht sollte Microsoft wirklich diese Funktion berücksichtigen.
Für SQL Server 2000 (und jede andere 32-Bit-Edition von SQL Server) gibt es xp_pcre, die mit Perl kompatible reguläre Ausdrücke als eine Reihe erweiterter gespeicherter Prozeduren einführt. Ich habe es benutzt, es funktioniert.
Die neueren Versionen geben Ihnen direkten Zugriff auf die .NET integrated regular expressions (dieser Link scheint tot, hier ist ein weiterer: MSDN: How to: Work with CLR Database Objects).
Die Antwort ist nein, nicht im allgemeinen Fall, obwohl es davon abhängen könnte, was Sie effizient meinen. Für diese Zwecke verwende ich die folgende Definition: "Macht effektiv Gebrauch von Indizes und Joins in einer vernünftigen Reihenfolge", die wahrscheinlich so gut ist wie jede andere.
In diesem Fall sind 'effiziente' Abfragen 's-arg'-fähig, was bedeutet, dass sie Indexsuche verwenden können, um Suchprädikate einzuschränken. Gleichheiten (t-Joins) und einfache Ungleichungen können dies tun. AND-Prädikate können dies auch tun. Danach kommen wir in die Tabellen-, Index- und Bereichsabtastung - d. H. Operationen, die satzweise (oder index-keyby index-key) Vergleiche durchführen müssen.
Sonteks Antwort beschreibt eine Methode, die Regexp-Funktionalität in eine Abfrage einzubetten, aber die Operationen müssen immer noch Datensätze für Datensätze vergleichen. Das Auffüllen in einer Funktion würde einen funktionsbasierten Index ermöglichen, bei dem das Ergebnis einer Berechnung im Index materialisiert wird (Oracle unterstützt dies, und Sie können eine äquivalente Funktionalität in SQL Server erhalten, indem Sie die besprochene Art von Tricks verwenden in this article). Sie können dies jedoch nicht für eine beliebige Regexp tun.
Im allgemeinen Fall eignet sich die Semantik eines regulären Ausdrucks nicht zum Löschen von Übereinstimmungssätzen, wie es ein Index tut. Daher ist die Integration der Rexegp-Unterstützung in den Abfrageoptimierer wahrscheinlich nicht möglich.
denke ich, dass wir von den neuen Typen in SQL Server 2008 (hierarchyid, georäumlichen) sehen kann, dass, wenn Microsoft dies tun, fügen Sie es in Form einer SQL CLR Assembly
kommen Wenn Sie in der Lage sind Installieren Sie Assemblys in Ihrer Datenbank, die Sie selbst erstellen können, indem Sie in Visual Studio ein neues Database \ SQL Server-Projekt erstellen. Auf diese Weise können Sie einen neuen Trigger/UDF/Stored Proc/Aggregate oder UDT erstellen. Sie könnten System.Text.RegularExpressions in die Klasse importieren und von dort aus fortfahren.
hoffe, das hilft
Ich würde gerne die Möglichkeit haben, nativ reguläre Ausdrücke in SQL Server aufrufen für Ad-hoc-Abfragen und in gespeicherten Prozeduren verwenden. Unsere Datenbankadministratoren erlauben uns nicht, CLR-Funktionen zu erstellen, so dass ich LINQ Pad als eine Art armer Manns Abfrage-Editor für die Ad-hoc-Sachen verwendet habe. Dies ist besonders nützlich, wenn Sie mit strukturierten Daten wie JSON oder XML arbeiten, die in der Datenbank gespeichert wurden.
Und ich stimme zu, dass es scheint wie ein Versehen, dass es keine Unterstützung für reguläre Ausdrücke gibt, es scheint wie eine offensichtliche Funktion für eine Abfragesprache. Hoffentlich werden wir es in einer zukünftigen Version sehen, aber die Leute haben lange danach gefragt und es ist noch nicht in das Produkt eingedrungen.
Der häufigste Grund, den ich dagegen gesehen habe, ist, dass ein schlecht geformter Ausdruck catastrophic backtracking verursachen kann, der in .NET nicht abbrechen wird und fast immer den Neustart der Maschine erfordert. Vielleicht werden sie, sobald sie das im Framework ansprechen, in einer zukünftigen Version von SQL Server enthalten sein.
Dies ist Spekulation und Kommentar, keine Antwort. – amoss