https://www.hackerrank.com/challenges/more-than-75-marks/problem?isFullScreen=true
코드설명
SUBSTR + LENGTH 를 활용합니다.
이런 문제에서 항상 헷갈리는점은 SUBSTR에서 함수의 명확한 범위입니다.
SUBSTR(NAME, LENGTH(NAME)-2, 3)
"ABCDE"라는 문자열이 있다고 해봅시다.
SUBSTR함수의 두번쨰 매개변수는 LENGTH(NAME)-2 는 추출을 시작할 위치입니다. 즉 전체길이 - 2 는 이름의 뒤에서 세번째 문자의 위치입니다.
"ABCDE"에서는 5 - 2 로 "C"의 시작위치가 되고, "CDE"로 3개의 위치를 마저 출력합니다.
일반적으로 JAVA에서는 가장 첫번쨰 위치가 0 INDEX로 0-BASED로 코딩하곤하는데, SQL에서의 함수들은 1-BASED로 주로 사용되는 것 같습니다.
다시 정리해보면 아래와 같습니다.
SUBSTR(string, start_position [, length])
이떄 [, LENGTH]는 생략가능한데, 만약 생략하면 문자열의 끝까지 추출합니다.
ORACLE 코드
SELECT NAME
FROM STUDENTS
WHERE MARKS > 75
ORDER BY SUBSTR(NAME, LENGTH(NAME)-2, 3) ASC, ID ASC;