T-SQL中的IndexOf函数


168

给定一个电子邮件地址列,我需要找到@符号的位置以进行子字符串化。

indexofT-SQL中的字符串有什么功能?

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

在C#中

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

Answers:


248

CHARINDEX是您的寻找

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

(1 row(s) affected)

-要么-

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

(1 row(s) affected)

67

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

CHARINDEX('bar', 'foobar') == 4
PATINDEX('%bar%', 'foobar') == 4

请注意,您需要在两侧使用PATINDEX中的通配符。


35

一个非常小的尼特可以选择:

电子邮件地址的RFC允许第一部分在引号中包含“ @”符号。例:

"john@work"@myemployer.com

这很少见,但有可能发生。从理论上讲,您应该分割最后一个 “ @”符号,而不是第一个:

SELECT LEN(EmailField) - CHARINDEX('@', REVERSE(EmailField)) + 1

更多信息:

http://en.wikipedia.org/wiki/电子邮件地址


这些都是我要尝试确定并解决的问题。主要是人们只是错误地输入了他们的域名。大多数Web重定向回真实的,但是mx记录不转发,并且显示它们很尴尬
DevelopmentChris 2009年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.