2009-12-08 3 views
157

Учитывая столбец адреса электронной почты, мне нужно найти позицию знака @ для подстроки.Функция IndexOf в T-SQL

Что такое функция indexof, для строк в T-SQL?

Ищет что-то, что возвращает позицию подстроки внутри строки.

в C#

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

ответ

227

CHARINDEX является то, что вы ищете

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

(1 row(s) affected) 

-или-

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

(1 row(s) affected) 
11

Я полагаю, вы хотите использовать CHARINDEX. Вы можете прочитать об этом here.

58

Вы можете использовать либо CHARINDEX, либо PATINDEX, чтобы вернуть исходную позицию указанного выражения в символьной строке.

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

Учтите, что вам необходимо использовать подстановочные знаки в PATINDEX с обеих сторон.

+2

Заменить (SQL, '1 на основе', 'глупый') – Jeff

31

Один очень маленький нит выбрать:

RFC, адрес электронной почты позволяет первая часть включать знак «@», если она указана. Пример:

"[email protected]"@myemployer.com 

Это довольно необычно, но может случиться. Теоретически, вы должны разделить на последней "@" символ, не первый:

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

Дополнительная информация:

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

+0

Это те вещи, которые я пытаюсь определить и исправить в нашей базе данных. В основном люди просто неверно называют свое доменное имя. большинство веб-перенаправляют обратно на реальный, но записи mx не пересылаются, и отображение их становится неудобным. – DevelopingChris

+0

Узнавайте что-нибудь новое каждый день. –

Смежные вопросы