[sql] T-SQL의 IndexOf 함수

이메일 주소 열이 주어지면 하위 문자열에 대한 @ 기호의 위치를 ​​찾아야합니다.

indexofT-SQL의 문자열에 대한 기능 은 무엇입니까 ?

문자열 내에서 부분 문자열의 위치를 ​​반환하는 무언가를 찾고 있습니다.

C #에서

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



답변

CHARINDEX 는 당신이 찾고있는 것입니다.

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

(1 row(s) affected)

-또는-

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

(1 row(s) affected)


답변

CHARINDEX 또는 PATINDEX 를 사용 하여 지정된 표현식의 시작 위치를 문자열로 리턴 할 수 있습니다 .

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

양쪽의 PATINDEX에 와일드 카드를 사용해야합니다.


답변

선택할 수있는 매우 작은 니트 :

이메일 주소에 대한 RFC를 사용하면 첫 번째 부분에 “@”부호를 붙일 수 있습니다. 예:

"john@work"@myemployer.com

이것은 매우 드물지만 발생할 수 있습니다. 이론적으로 첫 번째가 아닌 마지막 “@”기호로 분할해야합니다 .

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

추가 정보:

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


답변

나는 당신이 사용하고 싶다고 생각합니다 CHARINDEX. 여기에서 읽을 수 있습니다 .


답변