substr()

substr() 함수는 문자열에서 지정한 인덱스 범위에 해당하는 부분 문자열을 반환합니다.

문법

substr(STR, BEGIN[, END])

매개변수

STR
원본 문자열 필드 또는 값입니다. 문자열이 아닌 값은 문자열로 변환하여 처리합니다.
BEGIN
추출을 시작할 문자 인덱스입니다. 인덱스는 0부터 시작합니다. 음수이면 문자열 끝에서부터 역방향으로 계산합니다. null이거나 숫자로 해석할 수 없는 값, 또는 값이 int 범위를 벗어나면 null을 반환합니다. 변환된 시작 인덱스가 문자열 길이 이상이거나 0 미만이면 null을 반환합니다.
END
(선택) 추출을 끝낼 문자 인덱스(미포함)입니다. 인덱스는 0부터 시작합니다. 생략하면 문자열 끝까지 추출합니다. 음수이면 문자열 끝에서부터 역방향으로 계산합니다. END가 문자열 길이보다 크면 문자열 끝까지 추출합니다. null이거나 숫자로 해석할 수 없는 값, 또는 값이 int 범위를 벗어나면 null을 반환합니다. BEGIN이 END보다 크거나 변환 후 0 미만이면 null을 반환합니다.

설명

substr() 함수는 STR 문자열의 BEGIN 인덱스(포함)부터 END 인덱스(미포함)까지의 부분 문자열을 반환합니다.

  • STR이 null이면 null을 반환합니다.
  • BEGIN이나 END가 null이거나 숫자로 해석할 수 없는 값, 또는 int 범위를 벗어난 값이면 해당 행에 대해 null을 반환합니다. 문자열 형태의 숫자(예: "42")는 정상적인 인덱스로 처리됩니다.
  • END와 BEGIN이 같으면 빈 문자열("")을 반환합니다.
  • BEGIN이나 END가 잘못된 값이어도 해당 행만 null이 되며, 쿼리는 중단되지 않고 나머지 행을 계속 처리합니다.

오류 코드

해당 사항 없음

사용 예

이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.

  1. URI의 앞부분 10자 추출

    table limit=5 WEB_APACHE_SAMPLE | eval result = substr(uri, 0, 10) | fields uri, result
    
  2. 시작 인덱스만 지정하여 URI의 첫 번째 / 이후 부분 추출

    table limit=5 WEB_APACHE_SAMPLE | eval result = substr(uri, 1) | fields uri, result
    | # result: "feed", "archives/2370" 등
    
  3. 음수 인덱스로 URI 끝부분 추출

    table limit=5 WEB_APACHE_SAMPLE | eval result = substr(uri, -5) | fields uri, result
    
  4. NULL 입력

    json "{'val': null}" | eval result = substr(val, 0, 3)
    | # result: null
    
  5. 시작 위치가 NULL인 경우 — null 반환(4.0.2609.0부터 적용된 동작)

    json "{'val': 'hello'}" | eval result = substr(val, null)
    | # result: null
    

    4.0.2609.0 이전에는 BEGIN이 null이면 원본 문자열(val) 전체를 그대로 반환했습니다. 이제는 이 경우 null을 반환합니다.

  6. 시작 위치가 숫자로 해석되지 않는 경우 — 해당 행만 null 반환

    json "{'val': 'hello'}" | eval result = substr(val, "abc")
    | # result: null
    

    4.0.2609.0 이전에는 이런 입력이 오류를 일으켜 쿼리 전체가 중단되었습니다. 이제는 해당 행만 null을 반환하고 나머지 행은 정상적으로 처리됩니다.

변경 이력

대상도입 릴리스
substr() 함수소나 4.0 이전 버전
잘못된 위치 인자를 쿼리 중단 없이 해당 행만 null로 반환4.0.2609.0