2015-01-26 3 views
0

나는Oracle 문자열 검색 관련 검색어? 검색과 일치하는 사용자 이름을 찾으십니까?

가정 해 테이블 ​​이름이 "사용자"및 열 이름 아래에 "DomainUser와"입니다

ac\jason_mirabello 
mac\jason_thompson 
nyc\jason_graham 
jdb\jason_bates 
내가 '뒤에 오는 사용자 이름을 가지고

입니다 간단한 쿼리를 작성하는 데 도움이 SQL로 비트에 새로운 오전 \ 사용자가 내가 도메인 부분을 제가 오라클에 위 달성하기 위해 쿼리를 작성

도움을 제외해야하므로 존재하는 경우 ' 그래서 내가 찾는 사용자 이름을 검색 할 필요가

답변

0

당신은 LIKE 연산자를 사용할 수 있습니다 백 슬래시 \가 존재하지 않는하지만 난 경우에 여기에 정규 표현식을 사용하여 좋아

SELECT * FROM users 
WHERE domainuser LIKE '%\jason_graham'; 

을 :

SELECT * FROM users 
WHERE REGEXP_SUBSTR(domainuser, '[^\\]+$') = 'jason_graham'; 

어려움과를 위의 두 가지 쿼리 모두 어느 것도 인덱스를 사용하지 않는다는 것입니다. 당신이 할 수있는 것은 후자의 쿼리와 함께 작동하는 함수 기반 인덱스를 만들 수 있습니다 :

CREATE INDEX domainuser_un ON users (REGEXP_SUBSTR(domainuser, '[^\\]+$')); 

것은 또한 인덱스가 "대소 문자 구분"이되도록 LOWER()을 사용하는 것이 도움이 될 수를 (단지로 변환해야합니다 검색어가 너무 소문자로) - 가정 귀하의 사용자 이름은 대소 문자를 구분하지 않습니다! 감사의

CREATE INDEX domainuser_un ON users (LOWER(REGEXP_SUBSTR(domainuser, '[^\\]+$'))); 

Here is an explanation of the regular expression I used.

+0

데이비드 번들 솔루션의 모든 좋은 작품! –

0

아래 절처럼 사용해보십시오 :

SELECT * 
FROM Users 
WHERE DomainUser LIKE '%jason_graham' 
관련 문제