Как мне извлечь строку 'foo' из строки foo@mail.com? - PullRequest
0 голосов
/ 17 сентября 2009
select left(emailaddress, len(emailaddress) - charindex('@', emailaddress))

Я получаю результат ниже:

foo@ma

Пожалуйста, исправьте выбранное утверждение ниже. Мне нужно сделать это с помощью тонов адресов электронной почты и извлечь имя пользователя ТОЛЬКО.

Ответы [ 4 ]

12 голосов
/ 17 сентября 2009

Вы непреднамеренно повторно реализуете "прямо":)

Попробуйте это:

select left(emailaddress, charindex('@', emailaddress) - 1)

Он ищет положение @ и принимает количество символов до, но не включает (это - 1) символ @.

Будьте осторожны со строками, которые не имеют @; в итоге вы получите пустую строку.

1 голос
/ 17 сентября 2009

Если вам нужно сделать это с тоннами (или тоннами, но определенно не тоннами) адресов электронной почты и / или вы делаете это часто, то подходящее время сделать это, когда данные поступают в таблицу (с помощью триггера вставки / обновления) и разбив ее на два столбца в этой точке. Таким образом, это происходит только при необходимости, а не каждый раз, когда вы делаете выбор на столе.

Данные почти всегда читаются гораздо чаще, чем записываются, поэтому, разделяя во время вставки / обновления, вы минимизируете объем работы, которую необходимо выполнить. Функции для каждой строки никогда не масштабируются хорошо, так как ваши таблицы становятся больше, и гораздо проще просто объединить два столбца, чем разделить их на основе разделителя символов.

Другие ответы уже говорят вам, как сделать раскол. Я утверждаю, что вы делаете это не в то время. Конечно, если об изменении схемы не может быть и речи, просто проигнорируйте этот ответ. Но, на мой взгляд, это был бы лучший путь.

1 голос
/ 17 сентября 2009
select left(emailaddress, charindex('@', emailaddress)-1)
0 голосов
/ 17 сентября 2009

Просто предположение. У меня нет доступа к sql-серверу, я не знаком с ним. Но ...

Вы пробовали:

 select left(emailaddress, charindex('@', emailaddress))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...