2009-12-08 6 views
157

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

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

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

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

答えて

227

CHARINDEX

はあなたが私はあなたがCHARINDEXを使用したいと考えてい

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

(1 row(s) affected) 

- または -

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

(1 row(s) affected) 
11

探しているものです。あなたはそれについてhereを読むことができます。

58

指定された式の開始位置を文字列に戻すには、CHARINDEXまたはPATINDEXのいずれかを使用できます。

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

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

+2

を交換してください(SQL、 '1ベース'、 '愚か') – Jeff

31

1つの非常に小さなNITが選ぶ:メールアドレスの

RFCは、それが引用されている場合は、最初の部分は、「@」記号を含めることができます。例:

"[email protected]"@myemployer.com 

これはまれですが、発生する可能性があります。理論的には、あなたが最後に分割しなければならない "@" 記号、最初ではない:

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

詳細情報:

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

+0

これは私がデータベースで決定し解決しようとしている種類のものです。主に人々は誤ってドメイン名を入力します。ほとんどのウェブは実際のものにリダイレクトされますが、mxレコードは転送されず、表示は厄介です – DevelopingChris

+0

毎日新しいものを学びましょう。 –

関連する問題