구글링을 해보니 나와 같은 책의 같은 부분에서 동일한 의문점을 가지고 있는 게시물을 발견했다. 요약하여 정리하자면 TRIM 계열 함수는 문자열 내부에 모든 해당 문자를 제거하는 것이 아닌 문자열 시작 또는 끝에 있는 해당 문자를 지우는 함수이다.
내가 의문을 가진 문자은 다음과 같다. RTRIM(LTRIM('SQL DEVELOPER', 'S'), 'SQL')의 출력은 QL DEVELOPER이다. LTRIM('SQL DEVELOPER', 'S')에서 가장 왼쪽의 S가 지워져 QL DEVELOPER가 되는 것은 이해했다. RTRIM('QL DEVELOPER', 'SQL')에서 'SQL'을 한 덩어리로 보는 것이 아니라 'S','Q','L'을 각각으로 본다고 했으니 해당 문자열에서 'S','Q','L'이 모두 지워져야한다고 생각했다.
이때 TRIM 함수는 가장 끝에 위치한 문자만 지우는 것이므로 'QL DEVELOPER'은 오른쪽 끝의 문자가 R로 S,Q,L에 모두 해당이 안된다. 따라서 함수는 아무것도 하지 않고 종료된다.
LTRIM('DEVELOPER', 'DE')을 말로 풀어 설명하면 다음과 같다. 문자열 'DEVELOPER'에서 'D'또는 'E'가 왼쪽 끝에 있으면 'D','E'가 아닌 문자가 나올 때까지 해당 문자를 지워라. 따라서 가장 왼쪽의 'D','E'가 지워져 'VELOPER'가 된다.