Функция IndexOf в T-SQL

С учетом столбца адреса электронной почты мне нужно найти позицию знака @для подстановки.

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

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

в С#

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

Ответ 1

CHARINDEX - это то, что вы ищете

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

(1 row(s) affected)

-или -

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

(1 row(s) affected)

Ответ 2

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

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

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

Ответ 3

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

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

"[email protected]"@myemployer.com

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

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

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

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

Ответ 4

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