Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise der CHARINDEX()-Funktion in SQL Server (T-SQL)

In SQL Server können Sie T-SQL CHARINDEX() verwenden Funktion, um die Anfangsposition eines Zeichenausdrucks innerhalb eines anderen Zeichenausdrucks zu finden.

Sie geben beide Zeichenausdrücke als Argumente an. Sie können auch ein optionales Argument angeben, um eine Position anzugeben, an der die Suche beginnen soll.

Syntax

Die Syntax lautet wie folgt:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Wobei expressionToFind ist der Ausdruck, den Sie in der anderen Zeichenfolge finden möchten, und expressionToSearch ist die andere Saite. Der optionale start_location kann verwendet werden, um eine Position innerhalb von expressionToSearch anzugeben zu suchen.

Beachten Sie, dass nur die Position des ersten Vorkommens zurückgegeben wird.

Beispiel

Hier ist ein Beispiel:

SELECT CHARINDEX('Bob', 'Bob mag Bier. Bob mag auch Rindfleisch.') AS Ergebnis;

Ergebnis:

+----------+| Ergebnis ||----------|| 1 |+----------+

In diesem Beispiel ist das erste Argument Bob , was bedeutet, dass wir das zweite Argument nach Bob suchen . Das Ergebnis ist 1, weil das die Position ist, an der Bob steht erscheint zuerst im zweiten Argument.

Vielleicht bemerken Sie auch diesen Bob erscheint tatsächlich zweimal im String, aber es wird nur die Position des ersten Treffers zurückgegeben.

Keine Übereinstimmung

Wenn das zweite Argument Bob nicht enthielt das Ergebnis wäre 0 gewesen .

SELECT CHARINDEX('Bob', 'Kate mag Bier. Kate mag auch Rindfleisch.') AS Ergebnis;

Ergebnis:

+----------+| Ergebnis ||----------|| 0 |+----------+

Festlegen einer Startposition

Sie können (optional) eine Startposition für die Suche angeben. Dies bedeutet, dass SQL Server jedes Vorkommen überspringt, das vor dieser Startposition steht. Die Ergebnisse werden jedoch weiterhin basierend auf ihrer Position innerhalb der gesamten Zeichenfolge (nicht von Ihrer gewählten Startposition) gemeldet.

Hier ist ein Beispiel zur Veranschaulichung:

SELECT CHARINDEX('Bob', 'Bob mag Bier. Bob mag auch Rindfleisch.', 16) AS Ergebnis;

Ergebnis:

+----------+| Ergebnis ||----------|| 17 |+----------+

In diesem Beispiel beginnen wir mit der Suche an Position 16 (was zufällig das Leerzeichen vor dem 2. Bob ist ). Das Ergebnis ist das erste Vorkommen von Bob wird übersprungen und die Position des zweiten zurückgegeben. Und wir können sehen, dass seine Position 17 Zeichen vom Anfang der Zeichenfolge entfernt ist (obwohl es nur ein Zeichen von dem ist, wo wir mit der Suche begonnen haben).

Groß-/Kleinschreibung

Sie können explizit eine Suche mit Berücksichtigung der Groß-/Kleinschreibung durchführen, indem Sie den COLLATE hinzufügen -Klausel zu Ihrem SELECT Aussage:

Hier ist ein Beispiel, das eine Suche mit und ohne Berücksichtigung der Groß- und Kleinschreibung enthält:

SELECT CHARINDEX('Bier', 'Bob mag Bier.' COLLATE Latin1_General_CS_AS) AS 'Groß-/Kleinschreibung', CHARINDEX('Bier', 'Bob mag Bier.' COLLATE Latin1_General_CI_AS) AS 'Groß-/Kleinschreibung'; 

Ergebnis:

+-------------+--------------------+| Groß-/Kleinschreibung beachten | Groß-/Kleinschreibung wird nicht beachtet ||---------------------+--------------------|| 0 | 11 |+---------------------+--------------------+

Beim ersten wird zwischen Groß- und Kleinschreibung unterschieden, da _CS (in der Sortierung) steht für Case-Sensitive. Beim zweiten wird die Groß-/Kleinschreibung nicht beachtet, da _CI steht für Case-Insensitive.