프로그래머스 연습

SUSU·2023년 6월 29일
0
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/157343

특정 옵션이 포함된 자동차 리스트 구하기

문제

CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.

해결

INSTR 함수를 사용 하여 해결한다
INSTR 함수는 문자열 내에서 특정 부분 문자열의 위치를 찾는 데 사용되는 SQL 함수로 해당 부분 문자열이 처음으로 나타나는 인덱스를 반환한다.

예를들어

car_idcar_typedaily_feeoptions
1트럭102000주차감지센서,열선시트
2SUV148000주차감지센서,후방카메라
3세단55000스마트키,통풍시트,가죽시트
4SUV150000주차감지센서,스마트키,열선시트,후방카메라,가죽시트

이런 테이블이 있다고 할때 아래 쿼리를 실행하면

SELECT  *, instr(options, "시트")
from CAR_RENTAL_COMPANY_CAR 
order by CAR_ID ;
car_idcar_typedaily_feeoptionsoptions instr(options, "시트")
1트럭102000주차감지센서,열선시트10
2SUV148000주차감지센서,후방카메라0
3세단55000스마트키,통풍시트,가죽시트8
4SUV150000주차감지센서,스마트키,열선시트,후방카메라,가죽시트15

이렇게 출력 되는 것이돠

문제는 options 에서 '네비게이션'항목이 포함된 레코드를 출력하는 것이므로 where조건절에 추가해서 아래와 같이 작성한다

SELECT *
FROM CAR_RENTAL_COMPANY_CAR cr
WHERE INSTR(OPTIONS,'네비게이션') > 0
ORDER BY CAR_ID DESC

근데 '네비게이션'의 유무만 확인하는거라 > 0은 생략해도 문제없이 출력된다.

보충

INSTR('Hello World', 'World')

'Hello World': 검색 대상이 되는 문자열(테이블의항목명을 적어도 OK)
World: 검색할 부분 문자

INSTR 함수는 대소문자를 구분하기때문에 대소문자를 구분하지 않고 검색하고 싶다면, LOWER 함수 또는 UPPER 함수와 함께 사용하여 문자열을 소문자나 대문자로 변환한 후에 비교할 수 있다.

SELECT INSTR(LOWER('Hello World'), LOWER('world'));

이렇게 작성하면 문자열을 소문자로 변환하여 변환후 검색한다.

profile
기록용

0개의 댓글