Hàm IndexOf trong T-SQL


168

Đưa ra một cột địa chỉ email, tôi cần tìm vị trí của dấu @ cho nền.

Là gì indexofchức năng, cho các chuỗi trong T-SQL?

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

trong C #

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

Câu trả lời:


248

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

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

(1 row(s) affected)

-hoặc là-

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

(1 row(s) affected)

67

Bạn có thể sử dụng CHARINDEX hoặc PATINDEX để trả về vị trí bắt đầu của biểu thứ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 các ký tự đại diện trong PATINDEX ở hai bên.


35

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

RFC cho các địa chỉ email cho phép phần đầu tiên bao gồm dấu "@" nếu nó được trích dẫn. Thí dụ:

"john@work"@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 phân chia biểu tượng "@" cuối cùng , không phải biểu tượng đầu tiên:

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

Thêm thông tin:

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


đây là những điều 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 mọi người chỉ gõ sai tên miền của họ. hầu hết các 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 trở nên khó xử
DevelopChris

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.