167 votes

Fonction IndexOf dans t-Sql

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

Quelle est la fonction indexof, pour les chaînes dans t-sql.

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

dans c #

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

245voto

Scott Ivey Points 19577

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)
 

65voto

OMG Ponies Points 144785

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

35voto

richardtallent Points 17534

Un très petit nit à choisir:

La RFC pour les adresses électroniques permet à la première partie d’inclure un signe "@" si elle est citée. Exemple:

 "john@work"@myemployer.com
 

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

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

Plus d'information:

http://en.wikipedia.org/wiki/Email%5Faddress

11voto

Justin Swartsel Points 2420

Je crois que vous voulez utiliser CHARINDEX . Vous pouvez lire à ce sujet ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X