반응형
oracle 12c - 마지막 문자 이후 문자열 선택
다음 문자열이 있습니다.
ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence
그래서 저는 선택하고 싶습니다.Sentence
마지막 마침표 뒤의 문자열이기 때문입니다.어떻게 해야 하나요?
완전성을 위해 정규 표현을 사용하는 솔루션이 있습니다(별로 복잡하지 않은 IMHO :-).
select regexp_substr(
'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence',
'[^.]+$')
from dual
정규식
- 점을 제외한 모든 항목과 일치하도록 음수 문자 클래스를 사용
[^.]
- 정량자 추가
+
이것들 중 하나 이상과 일치하는 것 - 닻을 사용합니다.
$
문자열 끝에 일치하는 항목을 제한합니다.
여러분은 아마도 복잡한 정규 표현으로 이것을 할 수 있을 것입니다.다음 방법이 좋습니다.
select substr(str, - instr(reverse(str), '.') + 1)
문자열이 마지막에 있을 때 이것이 작동하지 않는지 테스트하는 것만큼 좋은 것은 없습니다.- 0 = 0 정도입니다.개선 사항은 다음과 같습니다.
select (case when str like '%.' then ''
else substr(str, - instr(reverse(str), ';') + 1)
end)
편집:
이 예제는 로컬 오라클과 SQL Fiddle에서 실행할 때 모두 작동합니다.
이 코드를 실행 중입니다.
select (case when str like '%.' then ''
else substr(str, - instr(reverse(str), '.') + 1)
end)
from (select 'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence' as str from dual) t
그리고 또 다른 방법.
성능 측면에서 어느 쪽이 가장 좋을지 모르겠습니다.
여기서 차이점은 instr을 할 때 마지막 .을 찾기 위해 -1을 거꾸로 세는 것입니다.
With CTE as
(Select 'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence' str, length('ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence') len from dual)
Select substr(str,instr(str,'.',-1)+1,len-instr(str,'.',-1)+1) from cte;
select
substr(
'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence',
INSTR(
'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence',
'.',
-1
)+1
)
from dual;
그INSTR
함수는 세 번째 매개 변수인 발생을 허용합니다.기본값은 1(첫 번째 발생)이지만 음수도 사용할 수 있습니다(마지막 발생부터 거꾸로 카운트하는 것을 의미).
select substr(str, instr(str, '.', -1) + 1)
from (
select 'ThisSentence.ShouldBe.SplitAfterLastPeriod.Sentence'
as str
from dual);
Sentence
한 줄에 몇 개의 점이 있습니까?
select length(str) - length(replace(str, '.', '') number_of_dots from ...
마지막 점 뒤에 하위 문자열 가져오기:
select substr(str, instr(str, '.', 1, number_of_dots)+1) from ...
언급URL : https://stackoverflow.com/questions/24084644/oracle-12c-select-string-after-last-occurrence-of-a-character
반응형
'programing' 카테고리의 다른 글
Import 후 기존 데이터에 대해 MariaDB 데이터베이스의 모든 제약 조건을 검증하는 방법은 무엇입니까? (0) | 2023.07.25 |
---|---|
jQuery $.ajax() 함수의 오류 메시지 원본 (0) | 2023.07.25 |
utf8mb4를 사용하는 경우에도 테이블에 Go-buff-driver 문자열을 삽입하면 1336 오류가 발생합니다. (0) | 2023.07.25 |
MariaDB 10.2, jdbc ComplianceTruncation=false가 작동하지 않음 (0) | 2023.07.25 |
NgFor에서 Ng 모델을 사용한 각도 2 - 2방향 바인딩 (0) | 2023.07.25 |