2017-12-10 4 views
0

나는 대부분의 시간을 작동 아래의 업데이트 문을 가지고 있지만, 아래의 예에서, 텍스트 White가 필요로하는 것은 2UPDATE 문

는 아래 구문에서 변경 될 줄을 제거되지 않습니다 때문에 field2의 텍스트는 문자열의 텍스트 위치에 관계없이 field1에 존재하면 항상 제거됩니까?

Declare @Table1 Table (field1 varchar(100), field2 varchar(100)) 

Insert Into @Table1 (field1, field2) Values 
('Blue Green', 'Green'), ('Red White', 'Socks Are White') 

UPDATE @Table1 
SET field2 = REPLACE(field1,field2,'') 
WHERE field1 like '%'+field2+'%'; 

Select * from @Table1 

편집
이 필드 1에 존재하고 필드 1

+0

예상되는 결과를 표시하여 응원 추측을 끝내지 않도록 할 수 있습니까? – maSTAShuFu

+0

@maSTAShuFu - 편집 – IcyPopTarts

+0

을 참조하십시오. 두 번째 예제 행에서 '흰색'을 제거해야한다고 생각하는 이유를 설명하십시오. – HABO

답변

1
에 존재하기 때문에 FIELD2에서 단어 White을 생략하기 때문에 갱신 후 예상 결과는 FIELD2에서 단어 Green 생략

'Blue Green', '' 
'Red White', 'Socks Are' 

입니다

REPLACE 함수가 완전 교체를 사용 중입니다. 아래 코드는 "청색 녹색"의 발생을 ""로 대체합니다. 그러나 첫 번째 문자열에는 "파란색 녹색"문자열이 나타나지 않으므로 대체 할 문자열이 없습니다.

REPLACE('Green', 'Blue Green', '') 

먼저 필드 1을 단어로 나눠야합니다. 함수를 사용하여 문자열을 분할하는 방법은 solution을 참조하십시오. 또는 CLR을 사용하여 .net 함수를 호출하여 문자열을 분할 할 수 있습니다.

다음으로 커서를 사용하여 전체 테이블을 탐색하고 위의 함수에서 반환 한 모든 레코드에 대해 @Table의 모든 레코드에 대해 REPLACE 함수를 한 번씩 실행할 수 있습니다.

SQL이 매우 유용하지만 SET 테이블에서 한 번만 반복되는 SET 논리를 사용하지 않기 때문에 처음에 작성한 UPDATE 문보다 훨씬 느릴 수 있습니다.