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

168

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

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

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

в C #

var s = "abcde";
s.IndexOf('c'); // yields 2
DevelopingChris
источник

Ответы:

248

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

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

(1 row(s) affected)

-или-

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

(1 row(s) affected)
Скотт Айви
источник
67

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

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

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

OMG пони
источник
35

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

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

"john@work"@myemployer.com

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

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

Больше информации:

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

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

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

Джастин Свартсель
источник