2017-02-22 1 views
1

다음과 같은 문자열이 있는데 그 안에 10472314를 가져와야합니다. 이 단어는 하나이지만 마지막 단어입니다. PL/SQL 블록에서 가져 오는 방법을 알려 주실 수 있습니까? 모든 문자열 함수? UPDATE @문자열에서 두 번째 마지막 단어를 얻는 방법은 무엇입니까?

processed "SCOTT"."PRINCE05"       10472314 rows 

마지막으로, 문자열 함수를 사용하여 솔루션을 구축 할 수 있었다.

SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
+0

정직한 사람이라면 다시 질문을 읽으면 (그리고 그것이 무엇인지 모르는 것처럼) 그것은 당신에게 이해가되지 않는다고 인정할 것입니다. 미국은 어떻게 이해할 수 있습니까? "문자열의 행 수"는 무엇을 의미합니까? 그리고 그게 "** 특정 단어 **를 문자열로 얻는 방법"(당신의 제목)과 관련이 있습니까? – mathguy

+0

의견을 보내 주셔서 감사합니다. 나는 제목과 진술을 수정했다. 죄송합니다. – Sigularity

+0

OK - "마지막에서 두 번째"단어 (문자열의 끝에서 두 번째 단어)를 의미한다고 가정합니다. 그게 당신이 항상 필요로하는 것입니까, 마지막 두 번째 단어가 문자열입니까? 그리고 공백 (공백, 탭, 줄 바꿈, 일반적으로 "공백")으로 구분 된 단어는 어떻게 정의합니까? – mathguy

답변

0

INSTR에서 '-1'마법 옵션을 사용하면 역순으로 문자열을 검색 할 수 있습니다. 그렇게함으로써, 나는 우리가 마지막 단어를 발견 할 수 있다고 믿지만, 아래처럼 말입니다. 더러워 보이지만 그것은 단지 나를 위해 작동합니다.

SELECT SUBSTR(name, INSTR(name, ' ', -1 , 2) + 1 , INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2)) 
FROM prince_test; 

INSTR(name, ' ', -1 , 2) + 1 ==> the second occurrence of SPACE 
INSTR(name, ' ', -1 , 1) - INSTR(name, ' ', -1 , 2) ==> position gap between the first occurrence and the second. 
1

문자열의 끝에 '행'단어 앞에 숫자 세트 :

regexp_replace(text, '^(.+)([0-9]+)(rows)$', '\2') 

세번째 단어 :

regexp_substr(text, '\S+', 1, 3) 

번째 마지막 단어합니다 (N 번째 단어 n = 단어 수 -1) :

regexp_substr(text, '\S+', 1, regexp_count(text,'\S+') -1) 

많은 수의 행을 처리하는 경우 정규 표현식 기능이 느려질 수 있습니다. 트레이드 오프는 일반 표현의 표현력과 일반 substrinstr의 성능 사이에 있습니다. 개인적으로 명확한 성능 문제가없는 한 regexes를 선호합니다.

+0

그것은 작동합니다. 댓글 주셔서 감사합니다. – Sigularity

관련 문제