T-SQL中的IndexOf函数

时间:2009-12-08 20:02:24

标签: sql sql-server tsql string

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

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

寻找能够返回字符串中子字符串位置的内容。

在C#中

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

4 个答案:

答案 0 :(得分:240)

你正在寻找

CHARINDEX

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

(1 row(s) affected)

-OR -

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

(1 row(s) affected)

答案 1 :(得分:62)

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

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

请注意,您需要在任一方使用PATINDEX中的通配符。

答案 2 :(得分:34)

一个非常小的挑选:

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

"john@work"@myemployer.com

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

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

更多信息:

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

答案 3 :(得分:11)

我相信你想使用CHARINDEX。你可以阅读它here