[SQL] 010-1111-1111을 010-****-1111로 출력하는 알고리즘

정석기·2024년 1월 29일

SQL

목록 보기
2/4

> 📌 문제 : 010-1111-1111을 010--1111로 출력하는 알고리즘을 만들자.
EX) 010-2222-2222는 010-****-2222로 출력된다.

📒 사용되는 함수

📌 RPAD

: 오른쪽부터 특정 문자로 자릿수를 채우는 함수

RPAD(원본 문자열, 최종 문자열의 전체 길이, 채우고자 하는 문자나 공백)

📌 SUBSTR

: 문자열의 일부분을 추출하는 함수 (SQL의 인덱스는 1부터 시작한다.)

SUBSTR(원본 문자열, 추출을 시작할 위치)
SUBSTR(원본 문자열, 추출을 시작할 위치, 추출할 문자의 수(생략 가능, 생략 시 시작 위치부터 문자열의 끝까지 추출)

📌 INSTR

: 문자열 내에서 특정 문자 또는 부분 문자열이 처음으로 나타나는 위치를 찾는 함수

INSTR('문자열', '찾을 문자열')
INSTR('문자열', '찾을 문자열', '시작위치')
INSTR('문자열', '찾을 문자열', '시작위치', '발생횟수')

📒 SQL 쿼리문

SELECT RPAD(SUBSTR('010-7146-1970', 1, INSTR('010-7146-1970', '-')), 
LENGTH(SUBSTR('010-7146-1970', 1, INSTR('010-7146-1970', '-', -1)-1)), '*')
|| SUBSTR('010-7146-1970', -5, 5)
FROM DUAL;

< 쿼리문 해석 >

  • 전화번호 문자열에서 첫 번째 하이픈 ('-') 앞의 부분을 추출한다.
SUBSTR('010-7146-1970', 1, INSTR('010-7146-1970', '-'))

  • 전화번호의 첫 번째 하이픈 앞의 부분의 길이를 계산한다.
LENGTH(SUBSTR('010-7146-1970', 1, INSTR('010-7146-1970', '-', -1)-1)), '*')

  • 추출한 부분을 해당 길이만큼 '*' 문자로 채운다.
RPAD(..., LENGTH(...), '*')

  • 전화번호 문자열에서 마지막 다섯 자리를 추출한다.
SUBSTR('010-7146-1970', -5, 5)

  • | | 연산자로 '010-****'와 '-1970' 문자열을 연결한다.

📌 결과

profile
의료IT공학과 졸업 / 석기의 코딩일기🐾

0개의 댓글