https://www.hackerrank.com/challenges/more-than-75-marks/problem?isFullScreen=true

 

Higher Than 75 Marks | HackerRank

Query the names of students scoring higher than 75 Marks. Sort the output by the LAST three characters of each name.

www.hackerrank.com

코드설명

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;

 

+ Recent posts