IndexOf function in T-SQL

dado uma coluna de endereço de E-mail, preciso de encontrar a posição do sinal @ para substringir.

Qual é a função indexof, para cadeias de caracteres em T-SQL?

à procura de algo que devolva a posição de uma substring dentro de uma string.

Em C#

var s = "abcde";
s.IndexOf('c'); // yields 2
Author: BoffinbraiN, 2009-12-08

4 answers

CHARINDEX é o que procura

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

(1 row(s) affected)

- ou -

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

(1 row(s) affected)
 235
Author: Scott Ivey, 2012-10-02 16:24:00

Pode usar CHARINDEX ou PATINDEX para devolver a posição inicial da expressão indicada num texto de caracteres.

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

Lembre-se que precisa de usar os wildcards em PATINDEX de ambos os lados.

 60
Author: OMG Ponies, 2009-12-08 20:06:31

Um nit muito pequeno para escolher:

O RFC para endereços de E-mail permite que a primeira parte inclua um sinal "@" se for citado. Exemplo:

"john@work"@myemployer.com
Isto é pouco comum, mas pode acontecer. Teoricamente, você deve dividir no último "@" símbolo, não o primeiro:
SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1

Mais informações:

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

 32
Author: richardtallent, 2009-12-08 20:27:27

Acho que queres usar CHARINDEX. Você pode ler sobre isso aqui.

 11
Author: Justin Swartsel, 2009-12-08 20:04:24