Fungsi IndexOf dalam T-SQL

168

Diberikan kolom alamat email, saya perlu menemukan posisi tanda @ untuk substring.

Apa indexoffungsinya, untuk string dalam T-SQL?

Mencari sesuatu yang mengembalikan posisi substring dalam sebuah string.

dalam C #

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

Jawaban:

248

CHARINDEX adalah apa yang Anda cari

select CHARINDEX('@', '[email protected]')
-----------
8

(1 row(s) affected)

-atau-

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

(1 row(s) affected)
Scott Ivey
sumber
67

Anda dapat menggunakan CHARINDEX atau PATINDEX untuk mengembalikan posisi awal ekspresi yang ditentukan dalam string karakter.

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

Pikiran bahwa Anda perlu menggunakan wildcard di PATINDEX di kedua sisi.

OMG Ponies
sumber
35

Satu nit yang sangat kecil untuk dipilih:

RFC untuk alamat email memungkinkan bagian pertama menyertakan tanda "@" jika dikutip. Contoh:

"john@work"@myemployer.com

Ini sangat jarang, tetapi bisa terjadi. Secara teoritis, Anda harus membelah pada simbol "@" terakhir , bukan yang pertama:

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

Informasi lebih lanjut:

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

richardtallent
sumber
ini adalah hal-hal yang saya coba tentukan dan perbaiki dalam database kami. Terutama orang salah ketik nama domain mereka. kebanyakan web redirect kembali ke salah satu nyata tetapi catatan mx tidak maju, dan menampilkan mereka mendapat canggung
DevelopingChris
11

Saya yakin Anda ingin menggunakannya CHARINDEX. Anda dapat membacanya di sini .

Justin Swartsel
sumber