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


168

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

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

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

в C #

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

Ответы:


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 с обеих сторон.


35

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

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

"john@work"@myemployer.com

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

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

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.