2009-05-13 8 views
4

사용자 SQLServer 2005 다음은 문자열의 예입니다. } {\ F1 \ fnil \ fcharset0 굴림;}} \ viewkind4 \ UC1 \ PARD \ F0 \ F1의 \의 FS20의 \ 파 \ fs54 1000} 내가 '굴림'어떤 글꼴 이름을 대체 할select 문에서 여러 인스턴스 바꾸기

Select Replace(textlong1, 
     CASE When CharIndex(';',textlong1)> 10 Then 
     SubString(textlong1 
     , Charindex('fcharset',textlong1)+10 
     , CharIndex(';',textlong1) - Charindex('fcharset',textlong1)-10) 
     Else '' End 
     , 'Times New Roman') From exampletable 

나는 경우 stateme을 사용하고 있습니다 :

나는 (textlong1가 필드)와 첫 번째를 얻을 수 있습니다 SubString의 오류를 방지하려면 nt.

루프를 통과해도 'fcharset'이 대체되지 않으므로 두 번째 인스턴스를 찾지 못합니다 (항상 첫 번째 인스턴스에 걸렸습니다).

답변

1

첫 번째 패드를 교체 할 수 있으면 첫 번째 포트가 없어 질 때까지 교체하십시오. 당신이 업데이 트를 수행하는 경우 :

declare @done bit 
while @done <> 1 
    begin 
    UPDATE ... 
    if @@rowcount = 0 set done = 1 
    end 

또는 새로운 변수로 선택 :

declare @cur varchar(4000) 
declare @next varchar(4000) 
set @cur = 'The string to operate on' 
set @next = '' 
while @cur <> @next 
    begin 
    set @next = @cur 
    select @cur = REPLACE(@next,...) 
    end 

최종 결과는 지금 @cur에 저장 (. 너무 @next)되어

+0

'fcharset'을 대체하지 않으므로 첫 번째 수정 된 항목을 '건너 뛰기'로 바꿀 수 없습니다 (수정 사항보기 참조). – JeffO

+0

시작하기 전에 모든 "fcharset0 Times New Roman"을 "fcharset0 Arial Rounded MT Bold"로 바꾸십시오. 모든 루프 반복, 인덱스 1에서 검색 시작 또는 "fcharset0 Times New Roman"의 첫 번째 발생 이후. – Andomar

+0

도움을 주셔서 감사합니다. 다음과 같이 추가했습니다. @Start int를 선언합니다. - 시작으로 모든 CharIndex 함수에 this를 포함합니다. - While 루프의 최신 행 SET @Start = Charindex (';', @ next, @Start) – JeffO

0

항상 구분 기호 프로 시저를 사용하여 글꼴 목록 인스턴스 주위의 문자열을 분리하고 새로운 로마자로 바꿀 수 있습니다.

+0

가나요 평균 구분 기호? 수색을하려고합니다. – JeffO

+0

네, 그게 무슨 뜻입니까 – DForck42

2

.NET CLR 기능을 통합 할 수있는 경우 (MSDN에는이를 수행하는 많은 예제가 있음) 정규식을 사용하여 작업을 매우 간단하게 만들 수 있습니다.

+0

이 데이터베이스를 사용하는 타사 응용 프로그램입니다 (프런트 엔드를 더 제어 할 수 있다면이 허튼 소리는 허용되지 않습니다.). 이것이 문제를 일으킬 지 지켜봐야 할 것입니다. – JeffO

+0

네, .NET CLR 통합이 항상 실용적이지는 않다는 것을 알았습니다. (MSDN이 아무리 강요하더라도 ;-) 그것이 내가 할 수 있다면 말한 이유입니다. 당신이 할 수 없다면, 당신이 남겨놓은 것만으로도 다른 답안에서 제안 된 해결 방법을 얻을 수 있습니다. –

+0

유일한 진짜 문제는 내가 CLR의 비효율적 인 사용으로 인해 들리는 오버 헤드가 매우 높다는 것입니다. – DForck42

관련 문제