T-SQL'de IndexOf işlevi


168

Bir e-posta adresi sütunu verildiğinde, alt dize için @ işaretinin konumunu bulmam gerekiyor.

indexofT-SQL dizeleri için işlev nedir ?

Bir dize içindeki bir alt dizenin konumunu döndüren bir şey mi arıyorsunuz?

C # 'da

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

Yanıtlar:


248

CHARINDEX aradığınız şey

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

(1 row(s) affected)

-veya-

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

(1 row(s) affected)

67

Ya kullanabilirsiniz charIndex veya PATINDEX bir karakter dizesi belirtilen ifadenin başlangıç konumunu geri dönmek için.

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

Her iki tarafta PATINDEX'te joker karakterler kullanmanız gerektiğini unutmayın.


35

Seçilecek çok küçük bir nit:

E-posta adresleri için RFC, ilk bölümün alıntılanmışsa "@" işareti içermesine izin verir. Misal:

"john@work"@myemployer.com

Bu oldukça nadirdir, ancak olabilir. Teorik olarak, ilk "değil" son "@" sembolüne bölünmelisiniz :

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

Daha fazla bilgi:

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


Bunlar, veritabanımızda tespit etmeye ve düzeltmeye çalıştığım şeyler. Temelde insanlar sadece alan adlarını yanlış yazarlar. çoğu web gerçek olana geri yönlendirir ancak mx kayıtları iletilmez ve bunları görüntülemek garipleşir
— DevelopingChris

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.