Función IndexOf en T-SQL

168

Dada una columna de dirección de correo electrónico, necesito encontrar la posición del signo @ para la subcadena.

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

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

C ª#

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

Respuestas:

248

CHARINDEX es lo que buscas

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

(1 row(s) affected)

-o-

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

(1 row(s) affected)
Scott Ivey
fuente
67

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

Tenga en cuenta que debe usar los comodines en PATINDEX en ambos lados.

Ponis OMG
fuente
35

Una liendre muy pequeña para escoger:

El RFC para las direcciones de correo electrónico permite que la primera parte incluya un signo "@" si se cita. Ejemplo:

"john@work"@myemployer.com

Esto es poco común, pero podría suceder. Teóricamente, debe dividir el último símbolo "@", no el primero:

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

Más información:

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

richardtallent
fuente
Estos son los tipos de cosas que estoy tratando de determinar y corregir en nuestra base de datos. Principalmente las personas simplemente escriben mal su nombre de dominio. la mayor parte posterior redirección web a la real, pero los registros MX no lo hacen hacia adelante, y la visualización de ellos obtiene incómoda
DevelopingChris
11

Creo que quieres usar CHARINDEX. Puedes leer sobre esto aquí .

Justin Swartsel
fuente