프래그래머스 SQL - CONCAT(문자열 합치기), INSERT(문자열 삽입)

yeyeyeyeye·2025년 3월 4일

문제:
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회하는 SQL문을 작성해주세요. 이때, 전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력되도록 해주시고, 전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력해주세요. 결과는 회원 ID를 기준으로 내림차순 정렬해주세요.

조건1)중고 거래 게시물을 3건 이상 등록한 사용자의 사용자 ID, 닉네임, 전체주소, 전화번호를 조회

조건2)전체 주소는 시, 도로명 주소, 상세 주소가 함께 출력

조건3)전화번호의 경우 xxx-xxxx-xxxx 같은 형태로 하이픈 문자열(-)을 삽입하여 출력

조건4)결과는 회원 ID를 기준으로 내림차순 정렬

풀이:
SELECT u.user_id,
       u.nickname,
       CONCAT(u.city,' ',u.street_address1,' ',u.street_address2) AS 전체주소,
       CONCAT(substr(u.tlno,1,3),'-',substr(u.tlno,4,4),'-',substr(u.tlno,8,4)) AS 전화번호
FROM used_goods_board b LEFT JOIN used_goods_user u ON b.writer_id=u.user_id
GROUP BY b.writer_id
HAVING COUNT(b.writer_id) >=3
ORDER BY u.user_id desc;

결과:

user_idnickname전체주소전화번호
xlqpfh2잉여킹성남시 분당구 수내로 1 001-004010-6453-4911
xlaortm1투더문성남시 분당구 내정로165번길 35 104-1202010-3255-5431

CONCAT & CONCAT_WS

https://gent.tistory.com/437#google_vignette

CONCAT 함수는 많은 데이터베이스에서 사용 가능한 ANSI SQL 함수이며,
CONCAT 함수에 입력된 값은 문자형으로 변환 후 합치는 작업이 이뤄진다.
숫자와 문자가 함께 입력되어도 오류가 발생하지 않는다.

SELECT CONCAT(city,' ', street_address1, ' ' street_address2) AS 전체주소

SELECT CONCAT('It', 'is', 'snowing', 'today') AS WEATHER

WEATHER
Itissnowingtoday

SELECT CONCAT('It', ' ', 'is', ' ', 'snowing',' ', 'today') AS WEATHER

WEATHER
It is snowing today

CONCST_WS

CONCAT_WS("구분자", "문자열", "문자열", "문자열"...)
문자열을 특정 구분자로 합칠 때 유용하게 사용할 수 있다.

SELECT CONCAT_WS(' ', city, street_address1, street_address2) AS 전체주소


INSERT

https://k-wien1589.tistory.com/182

INSERT 기본 사용법: INSERT(original_string, position, length, new_string)

-original_string: 원본 문자열.
-position: new_string이 삽입된 후, 문자열 내에서 new string의 최종 위치(1부터 시작)
-length: original_string에서 new_string 삽입 시 제거될 문자 개수
-new_string: 삽입될 문자열

ex) 123456-> 123-456

SELECT INSERT(123456, 4, 0, '-') 

-original_string: 123456
-position: 4 (삽입될 문자열'-'의 최종 위치는 네 번째)
-length: 제거될 문자는 없다
-new_string: '-' (하이픈을 삽입한다.)

위 문제에서 적용하려고 해봤는데
010xxxxxxxx를 010-xxxx-xxx로 하이픈 두 개 삽입하고 싶으면 어떻게 해야할 지 모르겠다. 질문해봐야지ㅜㅜ..


DATE: 시간 정보가 없는 날짜를 나타냅니다. 형식은 'YYYY-MM-DD'입니다.

TIME: 날짜 정보가 없는 시간을 나타냅니다. 형식은 'HH:MM:SS'입니다.

DATETIME: 날짜 및 시간 정보를 모두 나타냅니다. 형식은 'YYYY-MM-DD HH:MM:SS'입니다.

TIMESTAMP: DATETIME과 유사하지만 범위가 '1970-01-01 00:00:01' UTC에서 '2038-01-19 03:14:07' UTC까지입니다.

출처: https://easyitwanner.tistory.com/276 [IT 시작해보기:티스토리]

profile
안녕하세요? 데이터분석가 되고 싶어요.

0개의 댓글