2009-12-08 18 views
157

Dada una columna de dirección de correo electrónico, necesito encontrar la posición del signo @ para subserrar.Función IndexOf en T-SQL

¿Cuál es la función indexof, para cadenas en T-SQL?

Buscando algo que devuelve la posición de una subcadena dentro de una cadena.

en C#

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

Respuesta

227

CHARINDEX es lo que busca

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

(1 row(s) affected) 

-o-

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

(1 row(s) affected) 
11

Creo que desee utilizar CHARINDEX. Puedes leer al respecto here.

58

Puede usar CHARINDEX o PATINDEX para devolver la posición inicial de la expresión especificada en una cadena de caracteres.

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

Ten en cuenta que debes usar los comodines en PATINDEX en cada lado.

+2

Reemplazar (sql, '1 basada', 'estúpida') – Jeff

31

Una muy pequeña para recoger nit:

El RFC de direcciones de correo electrónico permite a la primera parte para incluir un signo "@" si es citado. Ejemplo:

"[email protected]"@myemployer.com 

Esto es bastante raro, pero podría suceder. Teóricamente, se debe dividir en la última símbolo "@", no es la primera:

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

Más información:

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

+0

estos son los tipos de cosas que estoy tratando de determinar y corregir en nuestra base de datos. Principalmente la gente simplemente mecanografía su nombre de dominio. la mayoría de los sitios web redirigen a los reales, pero los registros de mx no se reenvían, y mostrarlos se torna incómodo – DevelopingChris

+0

Aprende algo nuevo todos los días. –