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

Réponses:


248

CHARINDEX est ce que vous recherchez

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

(1 row(s) affected)

-ou-

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

(1 row(s) affected)

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é.


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.