Функция 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. Вы можете прочитать об этом здесь.
Ответ 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