Função IndexOf no T-SQL


168

Dada uma coluna de endereço de email, preciso encontrar a posição do sinal @ para substring.

Qual é a indexoffunção, para seqüências de caracteres em T-SQL?

Procurando por algo que retorne a posição de uma substring dentro de uma string.

em c #

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

Respostas:


248

CHARINDEX é o que você está procurando

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

(1 row(s) affected)

-ou-

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

(1 row(s) affected)

67

Você pode usar CHARINDEX ou PATINDEX para retornar a posição inicial da expressão especificada em uma cadeia de caracteres.

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

Lembre-se de que você precisa usar os curingas no PATINDEX de ambos os lados.


35

Um nit muito pequeno para escolher:

A RFC para endereços de e-mail permite que a primeira parte inclua um sinal "@" se estiver entre aspas. Exemplo:

"john@work"@myemployer.com

Isso é bastante incomum, mas pode acontecer. Teoricamente, você deve dividir o último símbolo "@", não o primeiro:

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

Mais Informações:

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


esses são os tipos de coisas que estou tentando determinar e corrigir em nosso banco de dados. Principalmente as pessoas apenas digitam incorretamente seu nome de domínio. mais redirecionamento de volta web ao real, mas os registros MX não para a frente, e exibi-los fica estranho
DevelopingChris

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.