문자열의 UPDATE 및 REPLACE 부분


427

나는 두 개의 열이있는 테이블을 가지고, 한 IDValue. 두 번째 열에서 일부 문자열의 일부를 변경하고 싶습니다.

테이블 예 :

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

이제 123\Value문자열이 필요하지 않습니다. 나는 노력 UPDATEREPLACE:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4

스크립트를 실행할 때 SQL Server는 오류를보고하지 않지만 아무것도 업데이트하지 않습니다. 왜 그런 겁니까?


8
와일드 카드는 와일드 카드로 취급되지 않고 리터럴로 취급되므로 아무것도 대체하지 않습니다.
stuhpa

답변:


700

에 와일드 카드가 필요하지 않습니다 REPLACE. 두 번째 인수에 입력 한 문자열 만 찾으면 다음과 같이 작동합니다.

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123\', '')
WHERE ID <=4

(또한 \필요하지 않다고 가정하여 교체에 추가했습니다 .)


1
그것은 NTEXT 유형 화격자를 작동,하지만 :( >> 메시지 8116, 수준 16, 상태 1, 줄 21 - 인수 데이터 유형 기능을 대체의 인수 1에 대해 유효하지 않습니다 NTEXT.
Owidat

6
방금 해결책을 찾았습니다 :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
잠깐만, `? isn't that escaping the ``문자 가 무엇이고 이것을 잘못 만드는가?
Meekohi

도움이되었습니다
Stanley Okpala Nwosa

열 유형이 텍스트 또는 NText 인 경우 작동하지 않습니다.이 답변을 참조하십시오 stackoverflow.com/questions/4341613/…
Adil H. Raza

55

%아래와 같이 문자 를 제거하십시오

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4

40

모든 행을 업데이트 할 필요가없는 큰 테이블에서 쿼리 실행 속도 를 높이 려면 수정 될 행만 업데이트하도록 선택할 수도 있습니다.

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'

17

질문:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');

완벽한 쿼리 감사합니다
Raju Paladiya

8

당신은 7 개의 문자 인 날짜 코드가있는 테이블이 하나 있습니다.

"32-1000"

이제 모두 교체하고 싶습니다

"32-"

"14-"

실행해야하는 SQL 쿼리는

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)

3

누구나 당신의 스크립트를 바꾸고 싶어합니다.

update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%


4
검토 대기열에서 : 소스 코드 주위에 컨텍스트를 추가하도록 요청하십시오. 코드 전용 답변은 이해하기 어렵습니다. 게시물에 더 많은 정보를 추가 할 수있는 경우 asker 및 향후 독자 모두에게 도움이됩니다.
RBT

1
CREATE TABLE tbl_PersonalDetail
(ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);

INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                     (N'31-3-2015', N'Monay', 2),
                                     (N'28-12-2015', N'Monay', 2),
                                     (N'19-4-2015', N'Monay', 2)

DECLARE @Date Nvarchar(200)

SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)

Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 

1
귀하의 답변이 문제를 어떻게 해결하는지 설명하십시오. 모든 사람이보다 명확하고 나중에 참조 할 수 있도록 솔루션을 이해하는 데 도움이됩니다.
Aziz

1

아래 업데이트 쿼리를 사용해야합니다

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id <= 4

위의 쿼리 중 하나가 작동해야합니다.


0

페르시아어 단어로 대체

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

도움말 : dbo.TblNews-테이블 이름

키워드-파일 이름

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.