SQL 문제를 풀다 역시나 막힌 문제가 있었다
어지럽다...
하지만 풀어야 한다
전체 주소를 조회해야 하는데 주소들이 다 나눠져 있다
뭔지 잘 모르겠다
오늘도 역시나 검색!!
CONCAT 함수가 나온다
일단 적용
CONCAT(" ", U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2) AS "전체주소"
이렇게 적용해 보았다
앞에 시에서 띄어쓰기가 되어야 하는데 붙혀져서 나온다
이럴 땐 어떻게 해야 할까?
CONCAT_WS 란 함수가 있다
쓰으으읍.... 뭔지는 알 것 같은데 일단 적용해 본다
CONCAT_WS(' ', U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2) AS "전체주소"
잘 띄어졌다
이게 어떻게 되는 걸까?
찾아보니
CONCAT_WS는 파라미터에 구분자(separator)를 추가하여 문자열 사이사이에 구분자를 넣어 붙여주는 기능을 합니다.
아하!! separator 자리에 띄어쓰기를 넣었더니 문자열 사이에 띄어쓰기가 들어가는 거구나
그렇다면 이건 어떨까?
전화번호는 또 어떻게 나올까?
이렇게 붙혀져서 나온다
여기서도 CONCAT_WS를 넣어보자
SELECT CONCAT_WS('-' TLNO)
이렇게 넣었더니
오류가 뜬다
왜 인지 곰곰이 생각해 봤다
전화번호는 한 묶음으로 되어있어 -이 들어갈 수 있게 사이를 나눠줘야 한다
그렇다면 문장 사이를 끊으려면 어떤 함수를 써야 할까?
정답은 SUBSTRING 함수다
이 함수에 대해 찾아보니
SUBSTRING( 문자열, 시작 위치, 길이 ) >> 문자열에서 시작 위치부터 길이만큼 출력합니다.
이렇게 설명한다
010 다음에 - 을 넣어주려면
CONCAT_WS('-', SUBSTR(TLNO, 1, 3)
이렇게 문자열 + 시작 지점 + 길이
즉 첫 번째부터 시작해 3칸 다음에 -이 들어가는 것이다
그렇다면 이 함수를 이용하여
CONCAT_WS('-', SUBSTR(TLNO, 1, 3), SUBSTR(TLNO, 4, 4), SUBSTR(TLNO, 8, 4))
이렇게 코드를 쓰면
이렇게 나눠진 사이에 - 이 들어가는 걸 볼 수 있다
모르는 것이 해결이 되었으니 코드를 써 내려가면 된다
SELECT U.USER_ID,
U.NICKNAME,
CONCAT_WS(" ", U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2) AS "전체주소",
CONCAT_WS("-", SUBSTR(U.TLNO, 1, 3), SUBSTR(U.TLNO, 4, 4), SUBSTR(U.TLNO, 8, 4)) AS "전화번호"
FROM USED_GOODS_BOARD AS B
INNER JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID) => 3
ORDER BY U.USER_ID DESC
결과는?
오류가 뜬다
왜일까?
그래서 물어보았다
HAVING COUNT(U.USER_ID) => 3
이 부분이 잘못되었다
등호 표시에서 => 이건 쓸 수 없다
그렇다면 >=이렇게 써 보았다
SELECT U.USER_ID,
U.NICKNAME,
CONCAT_WS(" ", U.CITY, U.STREET_ADDRESS1, U.STREET_ADDRESS2) AS "전체주소",
CONCAT_WS("-", SUBSTR(U.TLNO, 1, 3), SUBSTR(U.TLNO, 4, 4), SUBSTR(U.TLNO, 8, 4)) AS "전화번호"
FROM USED_GOODS_BOARD AS B
INNER JOIN USED_GOODS_USER AS U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID) >= 3
ORDER BY U.USER_ID DESC
결과는?
정상적으로 잘 나오는 것을 볼 수 있다
왜 => 이렇게는 쓸 수 없는지는 추측으로는 등호 왼쪽에 부등호가 있어야 하는 것 같은데
이건 문법 공부를 하면서 더 알아가 보면 될 것 같다
오늘의 느낀점
비슷해 보이더라도 결과는 다를 수 있다
'코딩 나도 할 수 있다!!' 카테고리의 다른 글
2024.03.21 (목) SQL USING (0) | 2024.03.21 |
---|---|
2024.03.20 (수) SQL ROUND 함수 (1) | 2024.03.20 |
2024.03.18 (월) SQL JOIN 함수와 DATEDIFF 함수 (1) | 2024.03.18 |
2024.03.15 (금) SQL HOUR함수 (1) | 2024.03.15 |
2024.03.14 (목) SQL 문제풀기 (1) | 2024.03.14 |