T-SQL 中的 IndexOf 函数

问题描述 投票:0回答:4

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

对于 T-SQL 中的字符串,

indexof
函数是什么?

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

在 C# 中

var s = "abcde";
s.IndexOf('c'); // yields 2
sql sql-server t-sql string
4个回答
263
投票

CHARINDEX就是您要找的东西

select CHARINDEX('@', '[email protected]')
-----------
8

(1 row(s) affected)

-或-

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

(1 row(s) affected)

73
投票

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

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

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


37
投票

有一个非常小的问题要挑:

电子邮件地址的 RFC 允许第一部分包含“@”符号(如果被引用)。示例:

"john@work"@myemployer.com

这种情况相当罕见,但也有可能发生。理论上,您应该在last“@”符号上进行拆分,而不是第一个:

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

更多信息:

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


11
投票

我相信你想使用

CHARINDEX
。您可以在这里阅读相关内容。

© www.soinside.com 2019 - 2024. All rights reserved.