2017-03-10 1 views
1

MS SQL에서 변환을 수행하고 있습니다. 원래 코드Teradata에서 역순으로 문자열 검색

역순

(LTRIM (RTRIM (문자열 (후진 ("문자열"), 1- (charIndex에은 (' '는 ("문자열")))))) 역방향)

그렇다면 끝 부분에서 공백을 찾을 때까지 문자열을 검색하면 그 문자열을 그 값으로 가져옵니다.

EX.

'ABCD (123)'결과는 '(

'12 단계 (3-2) '결과는 내가이 SELECT SUBSTR이 지금까지

'3-2 '는'123 '입니다 ABCDE 1234 '문자 ('ABCDE 1234 ') - 2) 하지만 테라 데이타의 역 검색 :(

답변

0

SUBSTR + INSTR

select 'ABCD 123'      as str 
     ,substr(str,instr(str,' ',-1)+1) as token 
;  

+----------+-------+ 
| str | token | 
+----------+-------+ 
| ABCD 123 | 123 | 
+----------+-------+ 

select 'STEP 12 3-2'     as str 
     ,substr(str,instr(str,' ',-1)+1) as token 
;  

+-------------+-------+ 
|  str  | token | 
+-------------+-------+ 
| STEP 12 3-2 | 3-2 | 
+-------------+-------+ 
+0

작전 전에이 해결책을 알지 못했습니다. 죄송합니다. – dnoeth

+0

문제가 없으며 실제로 instr에 +1을 잊어 버렸습니다. –

0

당신은 시도 할 수 있습니다 다음을 수행하는 방법을 알고하지 않습니다

검색어 :

select strtok('STEP 12 3-2',' ',character_length('STEP 12 3-2') - character_length(Oreplace('STEP 12 3-2',' ',''))+1) 

출력 :

3-2 

검색어 :

select strtok('ABCD 123',' ',character_length('ABCD 123') - character_length(Oreplace('ABCD 123',' ',''))+1) 

출력 :

123 

strtok은 특정 구분 기호로 문자열을 분리하지만 character_length + oreplace는 "공간"의 발생 횟수를 알려줍니다.

0

REGEXP_SUBSTR (정규 표현식을 알고 있지만 더 높은 CPU의 비용으로 오면 매우 간단)

select 'ABCD 123'     as str 
     ,regexp_substr(str,'[^ ]*$') as token 
;  

+----------+-------+ 
| str | token | 
+----------+-------+ 
| ABCD 123 | 123 | 
+----------+-------+ 

select 'STEP 12 3-2'     as str 
     ,regexp_substr(str,'[^ ]*$') as token 
;  

+-------------+-------+ 
|  str  | token | 
+-------------+-------+ 
| STEP 12 3-2 | 3-2 | 
+-------------+-------+ 
관련 문제