2014-12-18 3 views
0

상태 변경 내용이 포함 된 열이 있지만 전체 문자열을 반환하고 싶지 않습니다. 특정 키워드 뒤에 문자열의 일부만 반환하는 방법이 있습니까? 열의 모든 값은 X에서 Y까지의 형식으로되어 있습니다. 여기서 X와 Y는 한 단어 또는 여러 단어가 될 수 있습니다. substringtrim 함수를 살펴 보았지만 몇개의 공간을 유지하고 싶은지에 대한 지식이 필요합니다.키워드 뒤에 문자열 자르기

편집 : 상태에서 Y 부분을 유지하고 'X부터'를 제거하고 싶습니다.

+3

? 어떤 가치관의 예는 무엇이며 원하는 것은 무엇입니까? –

+0

SQL Server 2012의 DB입니다. 상태가 "인증에서 승인 필요 없음"으로 표시 될 수 있습니다. – Bigby

+0

1. 키워드가 3 회 이상 나오지 않아 2. 문자열에'.'가 없으면 트릭을 시도하십시오.'declare @field varchar (200) = 'X에서 Y까지' @keyword를 선언하십시오. varchar (200) = 'to' 다음을 선택하면 parsename (REPLACE (@ 필드, @ 키워드, '.'), 1) ' –

답변

2

Charindex와 Substring 및 Len을 조합하여 사용할 수 있습니다.

이 시도 :

select SUBSTRING(field,charindex('keyword',field), LEN('keyword')) 

그래서이 플롭을 발견하고는 필드에 어디를 추출

select SUBSTRING('bullflop',charindex('flop','bullflop'), LEN('flop')) 

편집 :

다음 단지에 LEN을 설정 나머지를 얻으려면 현장 LEN(field)

declare @field varchar(200) 
set @field = 'this is bullflop and other such junk' 
select SUBSTRING(@field,charindex('flop',@field), LEN(@field)) 

편집 2 :

Y

편집 : 3 :

코리 이해 이제

, 여기 ...

declare @field varchar(200) 
set @field = 'From X to Y' 
select Replace(SUBSTRING(@field,charindex('to ',@field), LEN(@field)), 'to ','') 

반환 신속하고 더러운 버전입니다 맞아, 이건 더 깨끗해.

declare @field varchar(200) = 'From X to Y' 
declare @keyword varchar(200) = 'to ' 
select SUBSTRING(@field,charindex(@keyword,@field) + LEN(@keyword), LEN(@field)) 
+0

"부분을 선택하십시오. 특정 키워드 ". 나는 그들이 키워드를 추출하고 싶다고 생각하지 않지만, * 키워드 뒤에 * 문자열의 나머지 부분을 찾는다. –

+0

코리가 정확합니다. 나는 'to'라는 단어 뒤에 문자열의 Y 부분을 원한다. – Bigby

+0

키워드 'to'에 대해 별도의 변수를 사용할 수 있으며 대체 대신 charindex 함수의 결과에 길이를 추가하십시오. 어쩌면 약간 더 깨끗합니다. –

0

당신은 당신이 원하는 것을 할 수있는 몇 가지 문자열 함수를 결합 할 수 있습니다 :

DECLARE @Field varchar(100) = 'From A to Z' 
DECLARE @Keyword varchar(100) = 'to' 

-- Method 1 (Find the keyword, then take the remainder of the string) 
SELECT LTRIM(SUBSTRING(@Field, 
    CHARINDEX(@Keyword, @Field, 0) + LEN(@Keyword), LEN(@Field))) 

편집 :

-- Method 2 (Take from the right the characters up to the keyword) 
SELECT RIGHT(@Field, LEN(@Field) - CHARINDEX(@Keyword, @Field, 0) - LEN(@Keyword)) 

가 생산 :

'Z' 
2

다른 답변입니다 좋았어, b 유타 내가 STUFF() 기능을 좋아하고 잘 알려진 될 것 같지 않습니다, 그래서 여기에 또 다른 옵션들 :

DECLARE @field VARCHAR(50) = 'From Authorized to Auth Not Needed' 
     ,@keyword VARCHAR(50) = ' to ' 
SELECT STUFF(@field,1,CHARINDEX(@keyword,@field)+LEN(@keyword),'') 

STUFF()SUBSTRING()와 결합 REPLACE()처럼, 당신은 그것을 문자열, 시작 위치와 길이를 공급 , 아무것도 또는 귀하의 경우에는 아무것도 바꿀 수 ''.

MSDN에서

:

사용하고있는 데이터베이스
STUFF (character_expression , start , length , replaceWith_expression) 
+0

'STUFF()'가 존재한다는 것을 결코 알지 못했습니다. 흥미 롭 군! – Matt

+0

상태 길이가 다를 수 있으므로이 방법이 효과가 있을지 잘 모르겠습니다. – Bigby