给定一个电子邮件地址列,我需要找到用于子串的 @ 符号的位置。
对于 T-SQL 中的字符串,
indexof
函数是什么?
寻找返回字符串中子字符串位置的东西。
在 C# 中
var s = "abcde";
s.IndexOf('c'); // yields 2
CHARINDEX就是您要找的东西
select CHARINDEX('@', '[email protected]')
-----------
8
(1 row(s) affected)
-或-
select CHARINDEX('c', 'abcde')
-----------
3
(1 row(s) affected)
有一个非常小的问题要挑:
电子邮件地址的 RFC 允许第一部分包含“@”符号(如果被引用)。示例:
"john@work"@myemployer.com
这种情况相当罕见,但也有可能发生。理论上,您应该在last“@”符号上进行拆分,而不是第一个:
SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1
更多信息: