2009-12-08 31 views
157

Được cung cấp cột địa chỉ email, tôi cần tìm vị trí của dấu @ cho dữ liệu.Chức năng IndexOf trong T-SQL

Chức năng indexof, cho các chuỗi trong T-SQL là gì?

Tìm kiếm thứ gì đó trả về vị trí của chuỗi con trong chuỗi.

trong C#

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

Trả lời

227

CHARINDEX là những gì bạn đang tìm kiếm

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

(1 row(s) affected) 

-hoặc-

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

(1 row(s) affected) 
11

Tôi tin rằng bạn muốn sử dụng CHARINDEX. Bạn có thể đọc về nó here.

58

Bạn có thể sử dụng CHARINDEX hoặc PATINDEX để trả về vị trí bắt đầu của biểu thức được chỉ định trong chuỗi ký tự.

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

Lưu ý rằng bạn cần sử dụng ký tự đại diện trong PATINDEX ở hai bên.

+2

Replace (sql, '1 dựa', 'ngu ngốc') – Jeff

31

Một nit rất nhỏ để chọn:

RFC cho địa chỉ email cho phép phần đầu tiên bao gồm ký hiệu "@" nếu được trích dẫn. Ví dụ:

"[email protected]"@myemployer.com 

Điều này là khá phổ biến, nhưng có thể xảy ra. Về mặt lý thuyết, bạn nên tách trên cuối cùng "@" biểu tượng, chứ không phải là người đầu tiên:

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

Thông tin thêm:

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

+0

đây là những thứ mà tôi đang cố gắng xác định và sửa chữa trong cơ sở dữ liệu của chúng tôi. Chủ yếu là mọi người chỉ cần gõ sai tên miền của họ. hầu hết các trang web chuyển hướng trở lại thực tế nhưng các bản ghi mx không chuyển tiếp, và hiển thị chúng được awkward – DevelopingChris

+0

Tìm hiểu một cái gì đó mới mỗi ngày. –

Các vấn đề liên quan