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
DevelopingChris
fonte

Respostas:

248

CHARINDEX é o que você está procurando

select CHARINDEX('@', '[email protected]')
-----------
8

(1 row(s) affected)

-ou-

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

(1 row(s) affected)
Scott Ivey
fonte
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.

Pôneis OMG
fonte
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

richardtallent
fonte
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
11

Eu acredito que você quer usar CHARINDEX. Você pode ler sobre isso aqui .

Justin Swartsel
fonte