Функція 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.