Funzione IndexOf in T-SQL


168

Data una colonna di indirizzo e-mail, devo trovare la posizione del segno @ per la sottostringa.

Qual è la indexoffunzione, per le stringhe in T-SQL?

Alla ricerca di qualcosa che ritorni la posizione di una sottostringa all'interno di una stringa.

in C #

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

Risposte:


248

CHARINDEX è quello che stai cercando

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

(1 row(s) affected)

-o-

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

(1 row(s) affected)

67

È possibile utilizzare CHARINDEX o PATINDEX per restituire la posizione iniziale dell'espressione specificata in una stringa di caratteri.

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

Ricorda che devi usare i caratteri jolly in PATINDEX su entrambi i lati.


35

Un piccolo pignolo da scegliere:

La RFC per gli indirizzi e-mail consente alla prima parte di includere un segno "@" se viene quotata. Esempio:

"john@work"@myemployer.com

Questo è abbastanza raro, ma potrebbe succedere. Teoricamente, dovresti dividere l' ultimo simbolo "@", non il primo:

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

Maggiori informazioni:

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


questi sono i tipi di cose che sto cercando di determinare e correggere nel nostro database. Principalmente le persone sbagliano a digitare il proprio nome di dominio. la maggior parte del reindirizzamento web torna a quello reale ma i record mx non si inoltrano e mostrarli diventa imbarazzante
Sviluppo di

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.