[내일배움캠프_데이터분석] 4주차 화요일 TIL _ INSTR(), CONCAT_WS ()
A-1. 한 걸음 더 나아가고자 하는 코드
SELECT *
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%네비게이션%'
ORDER BY CAR_ID DESC
- 기존에 자주 사용하던 LIKE 를 사용하지 않고 해당 문자열을 포함하는 데이터만 추출하고자 한다.
A-2. 한 걸음 더 나아간 코드
SELECT *
FROM CAR_RENTAL_COMPANY_CAR cr
WHERE INSTR(OPTIONS,'네비게이션') > 0
ORDER BY CAR_ID DESC
▶ INSTR('기준문자열' , '찾고자 하는 문자열')
▷ 기준 문자열에서 찾고자 하는 문자열이 있을 경우 존재하는 문자열의 위치값을 알려준다.
- OPTIONS 문자열에서 '네비게이션'을 포함하는 데이터를 추출하고자 한다.
- INSTR 사용 시 '네비게이션'이 문자열에 있다면 위치값을 표시함으로 0보다 큰 값 추출된다.
- SQL의 경우 첫 번째 문자열의 위치값 = 1
B-1. 한 걸음 더 나아가고자 하는 코드
SELECT U.USER_ID
, U.NICKNAME
, CONCAT(U.CITY,' ' , U.STREET_ADDRESS1,' ',U.STREET_ADDRESS2) '전체주소'
, CONCAT(SUBSTRING(U.TLNO,1,3), '-', SUBSTRING(U.TLNO,4,4),'-',SUBSTRING(U.TLNO,8,4)) '전화번호'
FROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID)>=3
ORDER BY USER_ID DESC
- 전화번호의 형식을 다음과 같이 변경하고자 한다.
- '01012341234' → '010-1234-1234'
- 기존 SUBSTRING을 사용하여 기준위치부터 원하는 길이만큼 잘라 하이폰(-)과 함께 CONCAT 으로 이어붙였다.
B-2. 한 걸음 더 나아간 코드
SELECT U.USER_ID
,U.NICKNAME
,CONCAT_WS(' ', U.CITY, U.STREET_ADDRESS1,
U.STREET_ADDRESS2) AS 전체주소
,CONCAT_WS('-', SUBSTRING(U.TLNO, 1,3),
SUBSTRING(U.TLNO, 4,4),
SUBSTRING(U.TLNO, 8,4)) AS 전화번호
FROM USED_GOODS_BOARD B INNER JOIN USED_GOODS_USER U ON B.WRITER_ID = U.USER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID)>=3
ORDER BY USER_ID DESC
▶ CONCAT_WS ('구분자' , '문자열1', '문자열2')
▷ 구분자를 사용하여 문자열을 연결할 때 사용되는 함수
- 구분자는 결과 문자열의 각 구성 요소 사이에 삽입된다.
- 문자열 개수는 필요한 만큼 늘릴 수 있다.
- 구분자를 사용하여 문자열을 나누고 연결할 때 주로 사용한다.
- CONCAT과의 차이점
* 구분자를 사용하지 않고 문자열을 단순히 연결한다.
* 구분자를 사용하고자 한다면, 문자열 사이에 구분자를 일일이 작성하여야 한다.
- 구분자 사용여부에 따라 선택하여 문자열을 연결하면 된다.