2017-12-29 36 views
0

내가 조회하고있는 레코드는 2 가지 형식으로 유지됩니다. 각 사람은 [email protected] 형식으로 자신의 전자 메일에 대한 기록을 적어도 1 건 가지고 있습니다. 어떤 사람들은 이메일이 [email protected] 인 두 번째 기록을 가지고 있습니다.SQL WHERE REGEXP_LIKE with metacharacters

전자 메일의 형식이 [email protected] 인 레코드를 어떻게 쿼리 할 수 ​​있습니까?

나는 다음과 같은 SQL 문으로 그것을 시도하지만 그것은 빈 결과 반환 : 그래서 고유 한 값을하지 않는 선택, 최종 제품은 몇 가지 다른 쿼리와 조인에 사용됩니다

Select * from email where regexp_like(emailaddress, '. (@)') 

을 여기서 옵션. 환경은 Oracle DB이며 여러 조인을 통해 수행되므로 더 효율적입니다. 누구든지 내가 뭘 잘못하고 있는지, 또는 이것을 성취 할 다른 방법이 있는지 아이디어가 있습니까?

어떻게 like 사용에 대한 여호수아

답변

0

당신은 REGEXP_LIKE 사용할 수 있습니다 : 모든 비 공백 문자

아니면 그냥 일반 LIKE 일치

Select * from email where regexp_like(emailaddress, '\S*\.\S*\@\S*\.\S*') 

사용 "\의 S의 *"

Select * from email where emailaddress LIKE '%.%@%.%' 

확실하지 무엇 문자 Oracle의 % 자리 표시 자에 포함되어 있으므로 테스트해야합니다.

REGEXP는 패턴 일치를 엄격하게 제어합니다.

작동하는지 알려주세요.

+0

완벽. 고마워요 톤 –

+0

아무 prob 밥 :). – ravioli

0

을 주셔서 감사합니다?

where emailaddress like '%.%@%' 

첫 번째 형식은 앰퍼샌드 앞에 마침표가있는 것으로 구별됩니다.

+0

나는 그 사실을 잊어 버렸고 작동한다. 나는 내가 함께 넣을 때, '%'와 같이 사용하면 효율성이 높아진다는 것에 조금 걱정이된다. –

+1

@JoshuaAverbuch - LIKE 방식은 regexp보다 빠를 것이다. 여전히 느려질 것입니다. 이러한 텍스트 검색과 관련된 작업은 느려질 것입니다. 그렇지 않은 경우 함수 기반 색인, 구체화 된보기 또는 해당 줄의 다른 솔루션을 고려하십시오. – mathguy