Site Overlay

Verwenden von SQL Server CHARINDEX und PATINDEX

Wenn Sie viele geschrieben habenanwendungen dann sind Sie wahrscheinlich auf Situationen gestoßen, in denen Sie müssenidentifizieren, ob ein bestimmtes Zeichen oder ein bestimmter Zeichensatz in einer Zeichenfolge angezeigt wird. In diesem Artikel werde ich die Verwendung der Funktionen CHARINDEX und PATINDEX für die Suche nach Textspalten und Zeichenfolgen besprechen. Ich zeige Ihnen, wie jede dieser Funktionen funktioniert, und erkläre die Unterschiede zwischen ihnen., Auch aresome Beispiele zur Verfügung gestellt, wie Sie in Betracht ziehen könnten, diese Funktionen zu verwenden, um eine Anzahl von verschiedenen Charaktersuchsituationen zu lösen.

Die Funktionen CHARINDEX und PATINDEXFUNCTION werden verwendet, um eine Zeichenkette nach einem Zeichen oder einer Gruppe von Zeichen zu durchsuchen. Wenn die gesuchte Zeichenfolge die gesuchten Zeichen enthält, geben diese Funktionen einen ganzzahligen Wert ungleich Null zurück. This Inter value is the starting location of where the character string being searched for is located within the string being searched., Die PATINDEXfunction ermöglicht die Verwendung der Platzhaltersyntax in dem gesuchten Muster, während die Funktion CHARINDEX die Suche nach Platzhalterzeichen nicht unterstützt. Schauen wir uns jede dieser Funktionen etwas genauer an.

Verwendung der CHARINDEXFunction

Die Funktion CHARINDEX kehrt die Startposition eines Zeichens oder einer Zeichenfolge innerhalb einer anderen Zeichenfolge zurück., Die Funktion CHARINDEX wird mit folgendem Format aufgerufen:

CHARINDEX (expression1, expression2)

Wobei expression1 die Zeichenfolge ist, die in expression2 zu finden ist, und start_locationis die Position, an der die Funktion CHARINDEX nach expression1in expression2 sucht.

Die Funktion CHARINDEX kehrt eine Ganzzahl zurück. Der zurückgegebene ganzzahlige Wert ist die Position, an der sich die gesuchten Zeichenfolgen innerhalb der gesuchten Zeichenfolge befinden. Wenn der CHARINDEX die gesuchten Zeichen nicht findet, gibt die Funktion einen ganzzahligen Wert Null zurück., Angenommen, wir führen den folgenden Funktionsaufruf auscharindex:

CHARINDEX('SQL', 'Microsoft SQL Server')

Dieser Funktionsaufruf gibt zurückder Startort der Zeichenfolge“ SQL „in der Zeichenfolge“MicrosoftSQL Server“. In diesem Fall gibt die Funktion CHARINDEX die Zahl 11 zurück, die, wie Sie sehen können, die Startposition von „S“ in der Zeichenfolge „Microsoft SQLServer“ist.

Angenommen, wir haben den folgenden Befehl CHARINDEX:

CHARINDEX('7.0', 'Microsoft SQL Server 2000')

In diesem Beispiel gibt dieCHARINDEX Funktion Null zurück, da die Zeichenfolge“ 7.0 „nicht in der Zeichenfolge“Microsoft SQL Server 2000“ gefunden werden kann., Lassen Sie uns ein paar Beispiele durchgehen, wie Sie möglicherweise die CHARINDEX-Funktion verwenden können, um einige tatsächliche T-SQL-Probleme zu lösen.

Für das erste Beispiel sagenSie möchten nur den Nachnamen der Spalte ContactName für die ersten 5 Datensätze in der Northwind-Datenbankkundentabelle anzeigen. Hier sind die ersten 5records.

ContactName------------------------------ Maria AndersAna TrujilloAntonio MorenoThomas HardyChristina Berglund

Wie Sie sehen, enthält der CustomerNamecontains sowohl den Vor-als auch den Nachnamen des Kunden, wobei Vor-und Nachname durch ein einzelnes Leerzeichen getrennt sind. Ich werde die CHARINDEX Funktion verwenden, umidentifizieren Sie die Position des Leerzeichens zwischen den beiden Namen., Auf diese Weise können wir verwendetdie Position des Raums, um den Kontaktnamen zu analysieren, sodass wir nur den letzten Namenabschnitt der Spalte anzeigen können. Hier ist ein T-SQL-Code, um nur den letzten Namen für die ersten 5 Datensätze in der Northwind-Kundentabelle anzuzeigen.

select top 5 substring(ContactName, charindex(' ',ContactName)+1 , len(ContactName)) as from Northwind.dbo.customers

Hier ist die ausgabe von thiscommand:

Last Name------------------------------ AndersTrujilloMorenoHardyBerglund

Die CHARINDEX funktion findetder raum zwischen dem Vor-und Nachnamen, so dass die teilstring funktion couldsplit die ContactName, so nur der Letzte Name wurde angezeigt., Ich habe dem von CHARINDEX zurückgegebenen Integer-Wert 1 hinzugefügt, sodass der angezeigte Nachname nicht mit einem Leerzeichen gestartet wurde.

Für das zweite Beispiel, sagenSie möchten alle Datensätze aus einer Tabelle zählen, in der eine bestimmte Spalte eine bestimmte Zeichenfolge enthält. Die CHARINDEX-Funktion kann verwendet werden, um Ihre Anfrage zu erfüllen. Um alle Adressen im Nordwind zu zählen.dbo.Customertable wenn die Adressspalte entweder das Wort ‚Road‘ oder anabbreviation für road (‚Rd‘) enthält, würde Ihre SELECT-Anweisung folgendermaßen aussehen:

select count(*) from Northwind.dbo.Customers where CHARINDEX('Rd',Address) > 0 or CHARINDEX('Road',Address)> 1

Wie funktioniert die PATINDEX-Funktion?,

Die Funktion PATINDEX kehrt die Ausgangsposition eines Zeichens oder einer Zeichenkette innerhalb einer anderen Zeichenfolge oder eines Ausdrucks zurück. Wie bereits erwähnt, verfügt der PATINDEX über zusätzliche Funktionen gegenüber CHARINDEX. PATINDEX unterstützt Platzhalterzeichen in der Suchmusterzeichenfolge. Dies macht PATINDEX wertvoll für die Suche nachvariablen Zeichenfolgenmustern. Der Befehl PATINDEX hat die folgende Form:

PATINDEX (‚%pattern%‘, expression )

Wobei „pattern“ die Zeichenfolge ist, nach der Sie suchen, und expression die Zeichenfolge ist, nach der Sie suchen., Häufig ist der Ausdruck eine Spalte in atable. Das “ % “ – Zeichen wird auf der Vorder-und Rückseite des Musters benötigt, es sei denn, Sie suchen nach dem Muster am Anfang und/oder Ende des Ausdrucks.

Wie die Funktion CHARINDEX gibt die Funktion PATINDEX die Startposition des Musters innerhalb der Stringbein-Funktion zurück. Wenn Sie einen PATINDEX Funktionsaufruf wie folgt haben:

PATINDEX (‚%BC%‘,’ABCD‘)

Dann ist das Ergebnis des PATINDEX Funktionsaufrufs 2, das ist das gleiche wie die CHARINDEX Funktion., Die%’s im oben genannten Kommando erzählt die PATINDEX-Befehl, um die position des“BC“ – Zeichenfolge, wo der string kann null oder mehr Zeichen in vor orafter „BC“. Das % – Zeichen ist ein Platzhalterzeichen.

Wenn Sie bestimmen möchten, ob eine Zeichenfolge mit einem bestimmten Zeichensatz beginnt, lassen Sie das erste% – Zeichen weg, und Ihr PATINDEX-Aufruf würde folgendermaßen aussehen:

PATINDEX(‚AB%‘,’ABCD‘)

In diesem Fall gibt die PATINDEXfunction eine 1 zurück, was darauf hinweist, dass das Muster ‚AB‘ in der gefunden wurdeausdruck ‚ABCD‘.,

Jetzt mit Platzhalterzeichensie können eine viel kompliziertere Mustervergleichssituation erstellen als die Simpleones, die ich Ihnen bisher gezeigt habe. Angenommen, Sie möchten bestimmen, ob eine Zeichenzeichenfolgeenthält die Buchstaben A und Z sowie eine beliebige numerische Zahl. Dann könnte Ihr PATINDEX Funktionsaufruf so aussehen.

PATINDEX (‚%%%%‘,’XYZABC123′)

Beachten Sie, dass das Muster, nach dem ich im obigen Beispiel suche, eine Reihe von Platzhalterreferenzen verwendet. ReviewSQL Server Bücher online für andere Wildcard Syntax Informationen., Lassen Sie uns durchgehenein paar Beispiele, wie wir den Befehl PATINDEX in conjunctionwith a SELECT Anweisung verwenden könnten.

Angenommen, Sie möchten alle findendie Datensätze, die die Wörter „Brot“ oder „Brot“ in der Beschreibungstextspalte im Nordwind enthalten.dbo.Kategorien Tabelle, dann würde Ihre select-Anweisung so aussehen:

select Description from Northwind.dbo.Categories where patindex('%read%',description) > 0

Hier habe ich Wildcarding verwendet, um entweder für ein Klein-oder Großbuchstaben „b“zu suchen., Wenn ich diese SELECT-Anweisung gegen die Northwind-Datenbank ausführe, werden die folgenden Beschreibungsspalten angezeigt:

Description--------------------------------------------------------Desserts, candies, and sweet breadsBreads, crackers, pasta, and cereal

Hier ist ein weiteres Beispiel, bei dem ich einige zusätzliche Platzhalterverweise verwendet habe, um einige Datensätze zu finden. Thisexample schließt der Beschreibung ein “ e “ als den zweiten Buchstaben aus theresult Satz im obigen Beispiel.

select Description from Northwind.dbo.Categories where patindex('%read%',description) > 0 and patindex('_%',description) = 1

Durch Hinzufügen eines zusätzlichen patindex-Funktionsaufrufs zur where-Anweisung, die das ^ wildcardsymbol verwendete, konnte ich die Beschreibung“Dessert, Süßigkeiten und süßes Brot“ ausschließen., Das obige Beispiel gab die folgende Einzelbeschreibung zurück.

Description--------------------------------------------------------Breads, crackers, pasta, and cereal 

Wie Sie den Charindex sehen könnenund der PATINDEX führt ähnliche Arten von Mustersuchen innerhalb einer Zeichenkette durch. Die PATINDEX-Funktion bietet Platzhalterspezifikationen, so dass sie für viele verschiedene Arten von Musterübereinstimmungen verwendet werden kann, während die CHARINDEXfunction dies nicht tut. Je nachdem, was Sie tun müssen, sind diese beiden Funktionen groß, um Ihnen beim Suchen, Bearbeiten und Analysieren von Zeichenfolgen in SQLServer zu helfen.

“ Alle Artikel des Kolumnisten Gregory A. Larsen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.