programing

oracle 12c - 마지막 문자 이후 문자열 선택

copyandpastes 2023. 7. 25. 23:21
반응형

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

반응형