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

Respuestas:


248

CHARINDEX es lo que buscas

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

(1 row(s) affected)

-o-

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

(1 row(s) affected)

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.


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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.