Oracle 기준으로, 상영코드(지점-관번호-시각)에서 관번호 두 자리… | [SQLD] SQL 개발자 기출유형 모의고사 9회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 9회
Oracle 기준으로, 상영코드(지점-관번호-시각)에서 관번호 두 자리만 다음 결과처럼 꺼내려 한다. ( ㉠ )에 들어갈 식으로 옳은 것은?[상영]
| 상영번호 | 상영코드 |
|---|---|
| 1 | 강남-07-1930 |
| 2 | 신촌역-03-2100 |
| 3 | 홍대-12-1015 |
| 4 | 일산호수-05-0900 |
SELECT 상영번호, ( ㉠ ) AS 관번호 FROM 상영 ORDER BY 상영번호;
[원하는 결과]
| 상영번호 | 관번호 |
|---|---|
| 1 | 07 |
| 2 | 03 |
| 3 | 12 |
| 4 | 05 |
1
SUBSTR(상영코드, INSTR(상영코드, '-') + 1, 2)
2
SUBSTR(상영코드, 4, 2)
3
LTRIM(SUBSTR(상영코드, 3, 3), '-')
4
SUBSTR(상영코드, LENGTH(상영코드) - 6)
해설
INSTR(상영코드, '-')가 첫 하이픈 위치를 돌려주므로 그 다음 위치부터 2글자를 자르면 지점명 길이와 관계없이 07·03·12·05 가 나온다.지점명이 2~4글자로 달라 관번호의 시작 위치가 행마다 다르므로 고정 위치가 아닌 구분자 위치를 기준으로 잘라야 한다.
- 길이를 생략한 SUBSTR 은 끝까지 잘라 07-1930 처럼 시각까지 나온다.
- 3번째부터 3글자는 지점명이 2글자일 때만 맞고 신촌역은 '역-0' 이 된다.
- 4번째부터 2글자도 지점명이 2글자인 행에서만 관번호가 나온다.
오류나 개정된 내용이 보이면 알려주세요