web-dev-qa-db-ja.com

T-SQLのIndexOf関数

電子メールアドレスの列を指定すると、部分文字列の@記号の位置を見つける必要があります。

T-SQLの文字列用のindexof関数とは何ですか?

文字列内の部分文字列の位置を返すものを探しています。

c#で

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

CHARINDEX はあなたが探しているものです

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

(1 row(s) affected)

-または-

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

(1 row(s) affected)
240
Scott Ivey

CHARINDEX または PATINDEX のいずれかを使用して、文字列内の指定された式の開始位置を返すことができます。

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

どちらの側でもPATINDEXでワイルドカードを使用する必要があることに注意してください。

62
OMG Ponies

選ぶべき非常に小さな1つ:

電子メールアドレスのRFCでは、最初の部分に引用符で囲まれた「@」記号を含めることができます。例:

"john@work"@myemployer.com

これは非常にまれですが、起こる可能性があります。理論的には、最初の記号ではなく、last「@」記号で分割する必要があります。

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

詳しくは:

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

34
richardtallent

CHARINDEXを使用したいと考えています。あなたはそれについて読むことができます ここ

11
Justin Swartsel