web-dev-qa-db-fra.com

Fonction IndexOf dans T-SQL

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

Qu'est-ce que la fonction indexof, pour les chaînes dans T-SQL?

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

en C #

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

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)
240
Scott Ivey

Vous pouvez utiliser soit 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

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

62
OMG Ponies

Un très petit nit à choisir:

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

"john@work"@myemployer.com

Ceci est assez rare, mais pourrait arriver. Théoriquement, vous devriez scinder le symbole last ​​"@", pas le premier:

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

Plus d'information:

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

34
richardtallent

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

11
Justin Swartsel