RIGHT
RIGHT (오른쪽 부분 문자열)
입력의 가장 오른쪽 부분 문자열을 반환해요.
RIGHT(STR, N)은 SUBSTR(STR, LENGTH(STR)-N+1, N)과 동일해요.
본문
구문
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 |
+---------+-----------------+-----+