T-SQL 中的 IndexOf 函数

给定一个电子邮件地址列,我需要找到用于子字符串的@符号的位置。

对于 T-SQL 中的字符串,indexof函数是什么?

查找返回子字符串在字符串中的位置的内容。

C #

var s = "abcde";
s.IndexOf('c'); // yields 2
252968 次浏览

CHARINDEX 就是你要找的

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


(1 row(s) affected)

或者

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


(1 row(s) affected)

我相信你想使用 CHARINDEX。你可以阅读有关它的 给你

可以使用 魅力指数PATINDEX返回字符串中指定表达式的起始位置。

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

注意您需要在 PATINDEX 的任意一边使用通配符。

一个很小的问题:

电子邮件地址的 RFC 允许第一部分包含一个“@”符号,如果它被引用的话。例如:

"john@work"@myemployer.com

这种情况很少见,但有可能发生。理论上,你应该在 最后“@”符号上分开,而不是第一个:

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

更多信息:

Http://en.wikipedia.org/wiki/email_address