Antwort

4

Auschecken this und this. Sie sind großartige Beiträge, wie man es macht.

5

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.

0

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

1

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.

+2

Dies ist Spekulation und Kommentar, keine Antwort. – amoss