기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SUBSTRING 함수
지정된 시작 위치를 기반으로 문자열의 하위 집합을 반환합니다.
입력이 문자열인 경우 추출된 문자의 시작 위치와 수는 바이트가 아닌 문자를 기준으로 하므로 멀티바이트 문자는 단일 문자로 계산됩니다. 입력이 이진 표현식인 경우 시작 위치와 추출된 하위 문자열은 바이트를 기반으로 합니다. 음의 길이는 지정할 수 없지만 음의 시작 위치는 지정 가능합니다.
명령문
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
SUBSTRING(character_string, start_position, number_characters )
SUBSTRING(binary_expression, start_byte, number_bytes )
SUBSTRING(binary_expression, start_byte )
인수
- character_string
-
검색 대상의 문자열입니다. 문자가 아닌 데이터 형식도 문자열로 처리됩니다.
- start_position
-
문자열 내에서 추출을 시작할 위치이며, 1부터 시작됩니다. start_position은 바이트가 아닌 문자 수를 기준으로 하기 때문에 멀티바이트 문자도 단일 문자로 계산됩니다. 이 수는 음의 값이 될 수 있습니다.
- number_characters
-
추출할 문자 수(하위 문자열의 길이)입니다. number_characters는 바이트가 아닌 문자 수를 기준으로 하기 때문에 멀티바이트 문자도 단일 문자로 계산됩니다. 이 수는 음의 값이 될 수 없습니다.
- start_byte
-
1에서 시작하여 추출을 시작할 이진 표현식 내의 위치입니다. 이 수는 음의 값이 될 수 있습니다.
- number_bytes
-
추출할 바이트 수, 즉 하위 문자열의 길이입니다. 이 수는 음의 값이 될 수 없습니다.
반환 타입
VARCHAR
문자열에 대한 사용 참고 사항
다음은 6번째 문자부터 4자의 문자열을 반환하는 예입니다.
select substring('caterpillar',6,4); substring ----------- pill (1 row)
start_position + number_characters가 string의 길이를 초과하면, SUBSTRING이 start_position부터 문자열 끝까지 하위 문자열을 반환합니다. 예:
select substring('caterpillar',6,8); substring ----------- pillar (1 row)
start_position
이 0 또는 음수인 경우에는 SUBSTRING 함수가 문자열의 첫 번째 문자부터 start_position
+ number_characters
-1의 길이를 갖는 하위 문자열을 반환합니다. 예:
select substring('caterpillar',-2,6); substring ----------- cat (1 row)
start_position
+ number_characters
-1이 0보다 작거나 같으면 SUBSTRING이 빈 문자열을 반환합니다. 예:
select substring('caterpillar',-5,4); substring ----------- (1 row)
예
다음은 LISTING 테이블의 LISTTIME 문자열에서 월을 반환하는 예입니다.
select listid, listtime, substring(listtime, 6, 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)
다음은 위와 동일하지만 FROM...FOR 옵션을 사용하는 예입니다.
select listid, listtime, substring(listtime from 6 for 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)
멀티바이트 문자가 포함되었을 수도 있는 문자열에서는 접두사를 예측적으로 추출할 때 SUBSTRING 함수를 사용할 수 없습니다. 그 이유는 문자 수가 아닌 바이트 수를 기준으로 멀티바이트 문자열의 길이를 지정해야 하기 때문입니다. 바이트 길이를 기준으로 문자열의 시작 세그먼트를 추출하려면 문자열을 VARCHAR(byte_length)로 변환하여 절사할 수 있습니다. 여기에서 byte_length는 반드시 필요한 길이입니다. 다음은 문자열 'Fourscore and
seven'
에서 첫 5바이트를 추출하는 예입니다.
select cast('Fourscore and seven' as varchar(5)); varchar ------- Fours
다음 예에서는 입력 문자열 Silva, Ana
의 마지막 공백 뒤에 나타나는 첫 번째 이름 Ana
를 반환합니다.
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))
reverse ----------- Ana