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.