T-SQL中的IndexOf函数

给定一个电子邮件地址列,我需要find@符号的子位置的位置。

T-SQL中的string的indexof函数是什么?

寻找返回string中子string位置的东西。

在C#

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

CHARINDEX是你正在寻找的

 select CHARINDEX('@', 'someone@somewhere.com') ----------- 8 (1 row(s) affected) 

-要么-

 select CHARINDEX('c', 'abcde') ----------- 3 (1 row(s) affected) 

您可以使用CHARINDEX或PATINDEX以stringforms返回指定expression式的起始位置。

 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

我相信你想使用CHARINDEX 。 你可以在这里阅读。