Oracle SQL을 사용하여 구분자 위치별로 문자열 분할
문자열이 있는데 특정 위치에서 구분 기호로 해당 문자열을 분할하려고 합니다.
예를 들어 my String은F/P/O그리고 제가 원하는 결과는 다음과 같습니다.

따라서 문자열을 가장 먼 딜리미터로 구분하고 싶습니다.
주의: 일부 문자열은F/O또한 아래 SQL은 정상적으로 작동하고 원하는 결과를 반환합니다.
작성한 SQL은 다음과 같습니다.
SELECT Substr('F/P/O', 1, Instr('F/P/O', '/') - 1) part1,
Substr('F/P/O', Instr('F/P/O', '/') + 1) part2
FROM dual
결과는 다음과 같습니다.

이 문제는 왜 발생하며 어떻게 해결할 수 있습니까?
따라서 문자열을 가장 먼 딜리미터로 구분하고 싶습니다.
오래된 질문인 것은 알지만, 이것은 기판과 INSTR로 충분한 단순한 요건입니다.REGEXP는 오래된 subtsr 및 instr 기능보다 여전히 느리고 CPU 부하가 높은 동작입니다.
SQL> WITH DATA AS
2 ( SELECT 'F/P/O' str FROM dual
3 )
4 SELECT SUBSTR(str, 1, Instr(str, '/', -1, 1) -1) part1,
5 SUBSTR(str, Instr(str, '/', -1, 1) +1) part2
6 FROM DATA
7 /
PART1 PART2
----- -----
F/P O
가장 먼 딜리미터가 필요하다고 하셨듯이, 첫 번째 딜리미터와 그 반대입니다.
접근은 괜찮았지만 INSTR에서 start_position을 놓쳤습니다.start_position이 음의 경우INSTR함수는 start_position number를 문자열의 끝에서 카운트하여 문자열의 선두를 검색합니다.
사용하고 싶다regexp_substr()이걸 위해서.이것은, 다음의 예에 유효합니다.
select regexp_substr(val, '[^/]+/[^/]+', 1, 1) as part1,
regexp_substr(val, '[^/]+$', 1, 1) as part2
from (select 'F/P/O' as val from dual) t
참고로 여기 SQL Fielle이 있습니다.
아, 마지막 딜리미터가 나오는 부분을 놓쳤네요.그러기 위해서는regex_replace()첫 번째 부분:
select regexp_replace(val, '/[^/]+$', '', 1, 1) as part1,
regexp_substr(val, '[^/]+$', 1, 1) as part2
from (select 'F/P/O' as val from dual) t
여기에 대응하는 SQL Fielle이 있습니다.
언급URL : https://stackoverflow.com/questions/26878291/split-string-by-delimiter-position-using-oracle-sql
'programing' 카테고리의 다른 글
| 각도 스코프 변수를 Javascript에 전달 (0) | 2023.03.11 |
|---|---|
| 왜 {{정의되지 않은 +번호}}}이(가) 반환되는 거죠? (0) | 2023.03.11 |
| 사용자 지정 게시 유형의 사용자 지정 데이터를 표시하는 방법 (0) | 2023.03.11 |
| Wordpress - 용어별 사용자 지정 게시 유형 목록의 사용자 지정 분류 페이지 (0) | 2023.03.11 |
| 서비스 내에서 $watch? (0) | 2023.03.11 |