RIGHT

RIGHT (오른쪽 부분 문자열)

입력의 가장 오른쪽 부분 문자열을 반환해요.

RIGHT(STR, N)은 SUBSTR(STR, LENGTH(STR)-N+1, N)과 동일해요.

출처: Snowflake SQL Reference - RIGHT

본문

구문

RIGHT( <string_expr> , <length_expr> )

인자

string_expr

VARCHAR 또는 BINARY 값으로 평가되는 표현식이에요.

length_expr

정수로 평가되는 표현식이에요. 다음을 지정해요:

  • 입력이 VARCHAR 값이면 반환할 UTF-8 문자 수
  • 입력이 BINARY 값이면 반환할 바이트 수

0보다 크거나 같은 길이를 지정해요. 길이가 음수이면 함수는 빈 문자열을 반환해요.

반환 값

반환 값의 데이터 타입은 string_expr의 데이터 타입과 같아요(VARCHAR 또는 BINARY).

입력 중 하나라도 NULL이면 NULL이 반환돼요.

사용 참고 사항

length_expr가 expr의 길이보다 크면 함수는 expr을 반환해요.

데이터 정렬(collation) 상세

  • 데이터 정렬은 VARCHAR 입력에 적용돼요. 첫 번째 매개변수의 입력 데이터 타입이 BINARY이면 데이터 정렬은 적용되지 않아요.
  • 영향 없음. 데이터 정렬이 구문상 허용되지만 처리에는 영향을 주지 않아요. 예를 들어 언어의 두 글자·세 글자 문자(헝가리어의 "dzs", 체코어의 "ch" 등)는 길이 인자에 대해 여전히 두 글자 또는 세 글자(한 글자가 아님)로 계산돼요.
  • 결과의 데이터 정렬은 입력의 데이터 정렬과 같아요. 이는 반환 값을 중첩 함수 호출의 일부로 다른 함수에 전달할 때 유용할 수 있어요.

예시

다음 예시는 RIGHT 함수를 사용해요.

기본 예시

SELECT RIGHT('ABCDEFG', 3);
+---------------------+
| RIGHT('ABCDEFG', 3) |
|---------------------|
| EFG                 |
+---------------------+

이메일, 전화, 날짜 문자열의 부분 문자열 반환

다음 예시는 테이블의 고객 정보에서 부분 문자열을 반환해요. 테이블을 만들고 데이터를 삽입해요:

CREATE OR REPLACE TABLE customer_contact_example (
    cust_id INT,
    cust_email VARCHAR,
    cust_phone VARCHAR,
    activation_date VARCHAR)
  AS SELECT
    column1,
    column2,
    column3,
    column4
  FROM
    VALUES
      (1, '[email protected]', '800-555-0100', '20210320'),
      (2, '[email protected]', '800-555-0101', '20240509'),
      (3, '[email protected]', '800-555-0102', '20191017');

SELECT * from customer_contact_example;
+---------+---------------------------------+--------------+-----------------+
| CUST_ID | CUST_EMAIL                      | CUST_PHONE   | ACTIVATION_DATE |
|---------+---------------------------------+--------------+-----------------|
|       1 | [email protected]           | 800-555-0100 | 20210320        |
|       2 | [email protected]     | 800-555-0101 | 20240509        |
|       3 | [email protected] | 800-555-0102 | 20191017        |
+---------+---------------------------------+--------------+-----------------+

RIGHT 함수와 함께 LENGTH 및 POSITION 함수를 사용해 이메일 주소에서 도메인을 추출해요. 이 예시는 먼저 입력 문자열의 길이를 구한 뒤 각 문자열에서 @의 위치를 빼서 도메인의 길이를 결정해요:

SELECT cust_id,
       cust_email,
       RIGHT(cust_email, LENGTH(cust_email) - (POSITION('@' IN cust_email))) AS domain
  FROM customer_contact_example;
+---------+---------------------------------+-------------+
| CUST_ID | CUST_EMAIL                      | DOMAIN      |
|---------+---------------------------------+-------------|
|       1 | [email protected]           | example.com |
|       2 | [email protected]     | example.org |
|       3 | [email protected] | example.net |
+---------+---------------------------------+-------------+

팁: POSITION 함수를 사용해 빈 문자(' ')나 밑줄(_) 같은 다른 문자의 위치를 찾을 수 있어요.

테이블의 cust_phone 컬럼에서 지역 번호는 항상 처음 세 글자예요. 지역 번호 없이 전화번호를 추출해요:

SELECT cust_id,
       cust_phone,
       RIGHT(cust_phone, 8) AS phone_without_area_code
  FROM customer_contact_example;
+---------+--------------+-------------------------+
| CUST_ID | CUST_PHONE   | PHONE_WITHOUT_AREA_CODE |
|---------+--------------+-------------------------|
|       1 | 800-555-0100 | 555-0100                |
|       2 | 800-555-0101 | 555-0101                |
|       3 | 800-555-0102 | 555-0102                |
+---------+--------------+-------------------------+

테이블의 activation_date 컬럼에서 날짜는 항상 YYYYMMDD 형식이에요. 이 문자열들에서 일(day)을 추출해요:

SELECT cust_id,
       activation_date,
       RIGHT(activation_date, 2) AS day
  FROM customer_contact_example;
+---------+-----------------+-----+
| CUST_ID | ACTIVATION_DATE | DAY |
|---------+-----------------+-----|
|       1 | 20210320        | 20  |
|       2 | 20240509        | 09  |
|       3 | 20191017        | 17  |
+---------+-----------------+-----+

더 알아보기