IndexOf-Funktion in T-SQL


168

Bei einer angegebenen E-Mail-Adressspalte muss ich die Position des @ -Zeichens für die Teilzeichenfolge ermitteln.

Was ist die indexofFunktion für Zeichenfolgen in T-SQL?

Suchen Sie nach etwas, das die Position eines Teilstrings innerhalb eines Strings zurückgibt.

in C #

var s = "abcde";
s.IndexOf('c'); // yields 2

Antworten:


248

CHARINDEX ist das, wonach Sie suchen

select CHARINDEX('@', 'someone@somewhere.com')
-----------
8

(1 row(s) affected)

-oder-

select CHARINDEX('c', 'abcde')
-----------
3

(1 row(s) affected)

67

Sie können entweder CHARINDEX oder PATINDEX verwenden , um die Startposition des angegebenen Ausdrucks in einer Zeichenfolge zurückzugeben.

CHARINDEX('bar', 'foobar') == 4
PATINDEX('%bar%', 'foobar') == 4

Beachten Sie, dass Sie die Platzhalter in PATINDEX auf beiden Seiten verwenden müssen.


35

Eine sehr kleine Auswahl:

Der RFC für E-Mail-Adressen ermöglicht es dem ersten Teil, ein "@" - Zeichen einzuschließen, wenn es in Anführungszeichen steht. Beispiel:

"john@work"@myemployer.com

Dies ist ziemlich ungewöhnlich, könnte aber passieren. Theoretisch sollten Sie das letzte "@" - Symbol teilen , nicht das erste:

SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1

Mehr Informationen:

http://en.wikipedia.org/wiki/Email_address


Dies sind die Dinge, die ich in unserer Datenbank ermitteln und beheben möchte. Hauptsächlich geben Leute ihren Domainnamen falsch ein. Die meisten Web-Weiterleitungen kehren zum echten zurück, aber die MX-Datensätze werden nicht weitergeleitet, und das Anzeigen wird umständlich
DevelopingChris

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.