https://school.programmers.co.kr/learn/courses/30/lessons/157343
CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.
INSTR 함수를 사용 하여 해결한다
INSTR 함수는 문자열 내에서 특정 부분 문자열의 위치를 찾는 데 사용되는 SQL 함수로 해당 부분 문자열이 처음으로 나타나는 인덱스를 반환한다.
예를들어
car_id | car_type | daily_fee | options |
---|---|---|---|
1 | 트럭 | 102000 | 주차감지센서,열선시트 |
2 | SUV | 148000 | 주차감지센서,후방카메라 |
3 | 세단 | 55000 | 스마트키,통풍시트,가죽시트 |
4 | SUV | 150000 | 주차감지센서,스마트키,열선시트,후방카메라,가죽시트 |
이런 테이블이 있다고 할때 아래 쿼리를 실행하면
SELECT *, instr(options, "시트")
from CAR_RENTAL_COMPANY_CAR
order by CAR_ID ;
car_id | car_type | daily_fee | options | options instr(options, "시트") |
---|---|---|---|---|
1 | 트럭 | 102000 | 주차감지센서,열선시트 | 10 |
2 | SUV | 148000 | 주차감지센서,후방카메라 | 0 |
3 | 세단 | 55000 | 스마트키,통풍시트,가죽시트 | 8 |
4 | SUV | 150000 | 주차감지센서,스마트키,열선시트,후방카메라,가죽시트 | 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'));
이렇게 작성하면 문자열을 소문자로 변환하여 변환후 검색한다.