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
您可以使用CHARINDEX或PATINDEX在字符串中返回指定表达式的起始位置.
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