Fonction IndexOf dans T-SQL

168

Étant donné une colonne d'adresse e-mail, je dois trouver la position du signe @ pour la sous-chaîne.

Quelle est la indexoffonction, pour les chaînes en T-SQL?

Vous recherchez quelque chose qui renvoie la position d'une sous-chaîne dans une chaîne.

en C #

var s = "abcde";
s.IndexOf('c'); // yields 2
DévelopperChris
la source

Réponses:

248

CHARINDEX est ce que vous recherchez

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

(1 row(s) affected)

-ou-

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

(1 row(s) affected)
Scott Ivey
la source
67

Vous pouvez utiliser CHARINDEX ou PATINDEX pour renvoyer la position de départ de l'expression spécifiée dans une chaîne de caractères.

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

N'oubliez pas que vous devez utiliser les caractères génériques dans PATINDEX de chaque côté.

Poneys OMG
la source
35

Une très petite nit à choisir:

Le RFC pour les adresses e-mail permet à la première partie d'inclure un signe "@" s'il est cité. Exemple:

"john@work"@myemployer.com

C'est assez rare, mais cela pourrait arriver. Théoriquement, vous devez vous séparer sur le dernier symbole "@", pas sur le premier:

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

Plus d'information:

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

richardtallent
la source
ce sont les types de choses que j'essaie de déterminer et de corriger dans notre base de données. Principalement, les gens tapent mal leur nom de domaine. la plupart des sites Web redirigent vers le réel, mais les enregistrements mx ne sont pas transférés et leur affichage devient gênant
DevelopingChris
11

Je crois que vous voulez utiliser CHARINDEX. Vous pouvez en savoir plus ici .

Justin Swartsel
la source