T-SQL中的IndexOf函数

Dev*_*ris 166 sql t-sql sql-server string

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

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

寻找返回字符串中子字符串位置的东西.

在C#中

var s = "abcde";
s.IndexOf('c'); // yields 2
Run Code Online (Sandbox Code Playgroud)

Sco*_*vey 243

CHARINDEX是您正在寻找的

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

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

-要么-

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

(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)


OMG*_*ies 64

您可以使用CHARINDEXPATINDEX在字符串中返回指定表达式的起始位置.

CHARINDEX('bar', 'foobar') == 4
PATINDEX('%bar%', 'foobar') == 4
Run Code Online (Sandbox Code Playgroud)

请注意,您需要在PATINDEX中使用通配符.


ric*_*ent 35

一个非常小的挑选:

电子邮件地址的RFC允许第一部分在引用时包含"@"符号.例:

"john@work"@myemployer.com
Run Code Online (Sandbox Code Playgroud)

这种情况非常罕见,但可能会发生.从理论上讲,你应该拆分最后一个 "@"符号,而不是第一个:

SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1
Run Code Online (Sandbox Code Playgroud)

更多信息:

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


Jus*_*sel 11

我相信你想用CHARINDEX.你可以在这里阅读它.