给定一个电子邮件地址列,我需要找到子符号的@符号位置。
对于T-SQL中的字符串,indexof
函数是什么?
寻找能够返回字符串中子字符串位置的内容。
在C#中
var s = "abcde";
s.IndexOf('c'); // yields 2
答案 0 :(得分:240)
select CHARINDEX('@', 'someone@somewhere.com')
-----------
8
(1 row(s) affected)
-OR -
select CHARINDEX('c', 'abcde')
-----------
3
(1 row(s) affected)
答案 1 :(得分:62)
您可以使用CHARINDEX或PATINDEX在字符串中返回指定表达式的起始位置。
CHARINDEX('bar', 'foobar') == 4
PATINDEX('%bar%', 'foobar') == 4
请注意,您需要在任一方使用PATINDEX中的通配符。
答案 2 :(得分:34)
一个非常小的挑选:
电子邮件地址的RFC允许第一部分在引用时包含“@”符号。例如:
"john@work"@myemployer.com
这种情况非常罕见,但可能会发生。从理论上讲,你应该拆分 last “@”符号,而不是第一个:
SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1
更多信息:
答案 3 :(得分:11)
我相信你想使用CHARINDEX
。你可以阅读它here。