문제
MYSQL
내가 작성한 정답
SELECT USER_ID, NICKNAME, CONCAT(CITY,' ',STREET_ADDRESS1,' ',STREET_ADDRESS2) "전체주소",
CONCAT(SUBSTRING(TLNO,1,3),'-',SUBSTRING(TLNO,4,4),'-',SUBSTRING(TLNO,8,4)) "전화번호"
FROM USED_GOODS_USER
WHERE USER_ID IN (
SELECT WRITER_ID FROM USED_GOODS_BOARD GROUP BY WRITER_ID HAVING COUNT(BOARD_ID) >=3
)
ORDER BY USER_ID DESC;ORACLE
내가 작성한 정답
SELECT USER_ID, NICKNAME, CITY||' '||STREET_ADDRESS1||' '||STREET_ADDRESS2 "전체주소",
SUBSTR(TLNO,1,3)||'-'||SUBSTR(TLNO,4,4)||'-'||SUBSTR(TLNO,8,4) "전체주소"
FROM USED_GOODS_USER
WHERE USER_ID IN (
SELECT WRITER_ID FROM USED_GOODS_BOARD GROUP BY WRITER_ID HAVING COUNT(BOARD_ID) >= 3
)
ORDER BY 1 DESC;다른 사람이 작성한 정답
SELECT user_id,
nickname,
city||' '||street_address1||' '||street_address2 전체주소,
REGEXP_REPLACE(tlno, '([0-9]{3})([0-9]{4})([0-9]{4})', '\1-\2-\3') 전화번호
FROM used_goods_user
WHERE user_id IN (
SELECT writer_id
FROM used_goods_board
GROUP BY writer_id
HAVING COUNT(board_id) >= 3
)
ORDER BY user_id DESC;REGEXP_REPLACE는 SQL에서 정규 표현식을 사용하여 문자열을 대체하는 함수로 주어진 문자열에서 특정 패턴을 찾아 다른 문자열로 바꾸는 데 사용된다.
REGEXP_REPLACE(source_string, pattern, replace_string [, match_occurrence [, return_option [, match_parameter]]])
1. REGEXP_REPLACE(TLNO,'([0-9]{3})([0-9]{4})([0-9]{4})','\1-\2-\3') AS 전화번호,
([0-9]{3}): 숫자 3개를 그룹으로 캡처
([0-9]{4}): 숫자 4개를 그룹으로 캡처
([0-9]{4}): 다시 숫자 4개를 그룹으로 캡처
이 패턴은 총 11자리 숫자(예: 1234567890)를 세 개의 그룹으로 나누어 캡처
'\1-\2-\3': 대체 문자열입니다. \1, \2, \3는 각각 정규 표현식에서 캡처한 그룹을 참조.
\1: 첫 번째 그룹 (3자리 숫자)
\2: 두 번째 그룹 (4자리 숫자)
\3: 세 번째 그룹 (4자리 숫자)
2. REGEXP_REPLACE(US.TLNO, '(.{3})(.+)(.{4})', '\1-\2-\3')
'(.{3})(.+)(.{4})': 정규 표현식
(.{3}): 첫 3개의 문자
(.+): 그 다음의 모든 문자
(.{4}): 마지막 4개의 문자
'\1-\2-\3': 대체 문자열입니다. 캡처된 그룹을 하이픈(-)으로 구분하여 출력
\1: 첫 번째 캡처 그룹(첫 3자리)
\2: 두 번째 캡처 그룹(중간 부분)
\3: 세 번째 캡처 그룹(마지막 4자리)REGEXP_REPLACE(TLNO, '[^0-9]', '') 숫자만 추출Share article