Funkcja IndexOf w T-SQL

168

Biorąc pod uwagę kolumnę adresu e-mail, muszę znaleźć pozycję znaku @ dla podłańcucha.

Jaka jest indexoffunkcja dla ciągów znaków w T-SQL?

Szukasz czegoś, co zwraca pozycję podciągu w ciągu.

w C #

var s = "abcde";
s.IndexOf('c'); // yields 2
DevelopingChris
źródło

Odpowiedzi:

248

CHARINDEX jest tym, czego szukasz

select CHARINDEX('@', '[email protected]')
-----------
8

(1 row(s) affected)

-lub-

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

(1 row(s) affected)
Scott Ivey
źródło
67

Możesz użyć CHARINDEX lub PATINDEX, aby zwrócić pozycję początkową określonego wyrażenia w ciągu znaków.

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

Pamiętaj, że musisz użyć symboli wieloznacznych w PATINDEX po obu stronach.

Kucyki OMG
źródło
35

Jedna bardzo mała nitka do wybrania:

Dokument RFC dla adresów e-mail pozwala, aby pierwsza część zawierała znak „@”, jeśli jest cytowany. Przykład:

"john@work"@myemployer.com

Jest to dość rzadkie, ale może się zdarzyć. Teoretycznie należy podzielić na ostatni symbol „@”, a nie pierwszy:

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

Więcej informacji:

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

richardtallent
źródło
to są rodzaje rzeczy, które próbuję określić i naprawić w naszej bazie danych. Głównie ludzie po prostu błędnie wpisują nazwę swojej domeny. większość stron internetowych przekierowuje z powrotem do prawdziwego, ale rekordy mx nie przekazują dalej, a wyświetlanie ich staje się niezręczne
DevelopingChris
11

Wierzę, że chcesz użyć CHARINDEX. Możesz o tym przeczytać tutaj .

Justin Swartsel
źródło