[DB] oracle SUBSTR/INSTR

김나영·2023년 9월 14일
0

DATABASE

목록 보기
9/9

테스트 중 유저의 이메일 데이터에서 도메인만 출력을 해야했다
분명 특정 문자만 가져올 수 있었던것 같은데
기억이 나지 않아서 나의 천사 지피티쨩에게 도움을 요청해따

얏빠리 와타시노 텐시 지피티쨩 다이스키💕💕

알려줬으면 또 내 지식으로 만들어야지,.!

SUBSTR 함수

문법
SUBSTR(문자열, 시작위치, 추출길이)

문자열 자르기 함수

  • 문자열의 일부분을 추출하는 데 사용함
  • 문자열 : 추출하려는 원본 문자열 (ex: m_email)
  • 시작 위치 : 추출을 시작할 위치. 1부터 시작함
  • 추출 길이 : 추출하려는 부분 문자열의 길이 / 지정하지 않으면 시작위치부터 문자열 끝까지 추출됨

INSTR

문법
INSTR(원본문자열, 찾을문자열, 시작위치, 발생번호)

구분자로 문자열 자르기, 문자열 위치 찾기 함수

  • 문자열 내에서 특정 문자열 또는 패턴의 위치를 찾는 데 사용함
  • 찾을 문자열 또는 패턴의 위치를 반환하며, 해당 문자열 또는 패턴이 원본 문자열에 없을 경우 0을 반환함
  • 원본 문자열 : 검색할 원본 문자열
  • 찾을 문자열 : 원본 문자열에서 찾을 문자열 또는 패턴
  • 시작 위치 : 검색을 시작할 위치 / 지정하지 않으면 문자열의 처음부터 검색 시작
  • 발생 번호 : 찾을 문자열 또는 패턴이 여러번 나타날 경우, 몇번째 발생을 찾을지 지정 / 지정하지 않으면 첫번째 발생을 찾음

사용예제

MEMBER 테이블의 DATE 컬럼 데이터의 1자리,2자리의 숫자가 18~23 까지의 데이터 중,
EMAIL 컬럼 데이터를 @으로 나누어 @의 1자리 뒤 부터 데이터의 끝까지 문자를 DOMAIN이라고 지칭하고 모든 데이터의 갯수를 세어 COUNT라고 지칭한다.
추출한 문자를 기준으로 중복을 제거하고, COUNT의 내림차순으로 정렬한다.

SELECT SUBSTR(EMAIL, INSTR(EMAIL, '@') + 1) AS DOMAIN,
COUNT(*) AS COUNT
FROM MEMBER
WHERE TO_NUMBER(SUBSTR(DATE, 1,2)) BETWEEN 18 AND 23
GROUP BY SUBSTR(EMAIL, INSTR(EMAIL, '@') + 1)
ORDER BY COUNT DESC;

결과

profile
응애 나 애기 개발자

0개의 댓글