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

Odpowiedzi:


248

CHARINDEX jest tym, czego szukasz

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

(1 row(s) affected)

-lub-

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

(1 row(s) affected)

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.


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.