2010-12-15 4 views
0

나는 다음과 같은 문자열을 SQL Server의 문자열에서 텍스트를 제거, 그것은 전체 문자열, 위의 같은 원래의 모습, 내가 bbr을 제거한되는 샘플교체하고

<b>22/10 - 10:47 - wes:</b> ###TaskDefId=46###N Enq - Send Quote<b><br/>29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ<b><br/>22/10 - 12:29 - white: .... 

이 아래를 참조하시기 바랍니다입니다 태그를 사용하면 더 명확 해집니다. 각 줄의 끝에서 나는 내가 뭘 제거하고 싶고 내가 대체하고 싶은 것을 적어 둡니다.

22/10 - 10:47 - wes: ###TaskDefId=46###N Enq - Send Quote    '###TaskDefId=46###N Enq - Send Quote' This should be removed completely 
29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ   '###TaskDefId=31###' This should be replaced with 'STAGE CHNAGED:' 
22/10 - 12:29 - white: Eamiled ###TaskDefId=31### Qtd - Email and Email  '###TaskDefId=31###Qtd - Email and Email' This should be removed completely because last stage was exactly same 
29/10 - 16:26 - wesl: Spoke ###TOaskDefId=48### CTD - DDDDDD   '###TOaskDefId=48###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different 
09/12 - 13:12 - wesl: Spoke ###TaskDefId=31### CTD - DDDDDD   '###TaskDefId=31###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different 
15/11 - 18:41 - white: Some xxxx ###TaskDefId=31### DDD AND - CDD TDED  '###TaskDefId=31###' This should be removed. 
09/12 - 13:12 - wesl: Balanced ###TaskDefId=23### SDTED DERDDW   '###TaskDefId=23###' This should be replaced with 'STAGE CHANGED:' 

질문이 지저분 해 보일 경우 메모장에 복사하여 붙여 넣으십시오. 질문이 의미가 있기를 바랍니다. 이 문자열이 다른 행이 아니라는 것을 다시 한번 알려 드리겠습니다.

편집 :

  1. 이 문자열은 테이블의 한 컬럼에 내가 이러한 변경 후 동일한 열을 업데이트해야합니다.

  2. 내가 내 질문에 난 그냥 를 교체하고 패턴을 제거하지만 와 ### TaskDefId = seomnumber ###을 대체하지 않으 에서 설명했듯이 'STAGE 변경 :'경우 마지막에 출현 현재 패턴 의 은 정확히 일치하고 패턴이있는 의 출현과 현재의 이 다른 경우 제거됩니다.

감사

+0

테이블 구조가 어떻게 보이는지 보여줄 수 있습니까 ?? 무엇보다 중요한 것은이 데이터가 포함 된 ** 데이터 형식 **입니다. –

+0

@marc_s에게 감사드립니다. DataType은 VARCHAR (MAX)이며 NotesHistory라는 한 열에이 문자열이 있습니다.이 변경 후 동일한 열을 업데이트해야합니다. – Kashif

+1

이것은 응용 프로그램 수준에서 더 적합하게 보입니다 (특히 바꾸기를 수행하는 경우와 같이 상황이 이전과 같습니다. 같은). 편안하게 사용할 수있는 언어를 찾고 데이터베이스에 연결하고 데이터를 추출하고 정리를 수행 한 다음 계속하십시오. 많은 행이있는 경우 일괄 처리 할 수 ​​있도록 "cleaned_up"열을 추가하는 것이 좋습니다. –

답변

0

당신이 사용할 수있는이 -

SELECT REPLACE (string_expression , string_pattern , string_replacement) 
GO 

하지만 당신의 문자열에

나는 당신이 대체 할 여러 패턴을 참조하십시오. 당신은 대체하려는 모든 패턴을 교체 한 때까지 반복적으로이 작업을 수행해야합니다, 지금

Declare @String_Original nvarchar(max) 
DECLARE @Replacement1 nvarchar(50) 
DECLARE @Pattern1 nvarchar(50) 

@String_Original = 'your string' 
@Pattern1 = '###TaskDefId=31###' 
@Replacement1 = 'STAGE CHNAGED:' 

SELECT REPLACE(@String_Original,@Pattern1,@Replacement) 

- 당신이 뭔가를 사용할 수 있습니다 제안합니다.

은 아마도 같은 -

DECLARE @Replacement2 nvarchar(50) 
DECLARE @Pattern2 nvarchar(50) 

@String_Original = 'your string' 
@Pattern2 = '###TaskDefId=46###N Enq - Send Quote' 
@Replacement2 = '' 

SELECT REPLACE(@String_Original,@Pattern2,@Replacement2) 

그리고, 모든 패턴이 작업을 수행 교체해야합니다. 그러나 교체 할 패턴이 동적이고 사전에 모르는 경우 간단하고 직선적 인 복제가 도움이되지 않을까 걱정됩니다. 논리를 가진 함수 또는 저장 프로 시저를 작성하여 패턴을 찾아 교체하십시오.

+0

감사합니다. @Pavanred하지만 ### TaskDefId = somenumber ##를 대체하거나 제거해야합니다. # 패턴의 이전 발생과 관련하여 #. 즉, 패턴의 이전 최종 발생이 정확히 동일하다면 제거하고, 그렇지 않으면 제거한다. – Kashif

+0

오, 그러면 자신의 논리를 작성하고 비교하고 바꾸고 ### TaskDefId = somenumber ###를 문자열에서 제거해야합니다. PATINDEX, SUBSTRING, REPLACE 등을 많이 사용하게 될 것입니다. 매우 더러운 문자열 조작을해야합니다. 나는이 모든 것을 피하기 위해 더 높은 차원에서 다른 해결책을 찾길 제안합니다. 그러한 문자열 조작은 최후의 수단으로 남겨 두십시오. – pavanred

+0

제안 남자 주셔서 감사합니다. – Kashif

관련 문제