2010-03-09 2 views
1

저는 MySQL에 대한 REGEX 지원 기능에 대해 다소 혼란 스럽습니다. 아직 REGEX within an sql statement을 사용하여 결과를 분리하는 방법에 대한 확실한 예제를 찾지 못했습니다.REGEX를 통해 MySQL에서 결과를 구문 분석합니다.

예 : 내가 좋아하는 뭔가를 보이는 테이블 이메일에서 데이터를 가져 수있는 방법을

...

+-------------------------+ 
|Emails     | 
|-------------------------| 
|[email protected]| 
+-------------------------+ 

과 같이 보이는 SQL 문을 통해 뭔가를 반환 ...

+------------------------------+ 
|Username | Domain | TLD | 
|-----------|------------|-----| 
|some.email | yourdomain | com | 
+------------------------------+ 
+0

MySQL 스크립트를 사용합니까? –

답변

8

MySQL에는 사용자가 원하는 기능을 수행하는 기본 제공 기능이 없습니다. 몇 가지 새로운 기능을 정의하는 것이 가능할 수도 있지만, 데이터베이스에 액세스하는 프로그래밍 언어에 상관없이이를 수행하는 것이 더 쉽습니다.

SELECT 
    SUBSTRING_INDEX(email, '@', 1) AS Username, 
    SUBSTRING_INDEX(SUBSTR(email, LOCATE('@', email)), '.', 1) AS Domain, 
    SUBSTRING_INDEX(email, '.', -1) AS TLD 
FROM users; 

, 그건 :

    하지만 이메일 주소 같은 간단한 들어

    , 당신은 당신이 같이 SUBSTRING_INDEX() function을 사용할 수 있습니다, 모두에서 정규 표현식을 사용할 필요가 없습니다

  • 사용자 이름 = 첫 번째 '@'앞에 오는 모든 것
  • 도메인 = 첫 번째 '@'와 첫 번째 '.'사이의 모든 것.
  • TLD = 마지막 '.'뒤에 오는 모든 것
+0

hmmm, 중간 부분 문자열이 아무것도 반환하지 않습니다 ... –

+0

제 실수는'LOCATE()'에 대한 인수가 거꾸로되어 있습니다. –

+0

감사합니다! 나는 너무 좋아, 이것은 아주 간단한 해결책이다. –

0

또한 시도 할 수

select substring_index(email, '@', 1) username 
     ,substring_index(substring_index(email, '@', -1), '.',1) domain 
     ,substring_index(email, '.', -1) tld 
from 
(select '[email protected]' email) E 

는 SUBSTRING_INDEX를 사용합니다. 첫 번째 substring_index '@'의 왼쪽에있는 모든 것, '@'의 오른쪽에있는 세 번째 (내부 substring_index), 도메인을 얻기 위해 두 번째 부분 문자열로 구문 분석 한 다음 마지막으로 '.'오른쪽에있는 모든 것을 가져옵니다.

관련 문제