SQL Server 테이블 열에서 문자열을 바꾸는 방법


364

SQL Sever경로 ( UNC또는 다른 방법 )를 참조 하는 테이블 ( )이 있지만 이제 경로가 변경됩니다.

경로 열에는 많은 레코드가 있으며 경로의 일부만 변경해야하지만 전체 경로는 변경하지 않아야합니다. 그리고 모든 레코드에서 동일한 문자열을 새 문자열로 변경해야합니다.

간단한 방법으로 어떻게 할 수 update있습니까?

답변:


604

이 쉬운 일이다 :

update my_table
set path = replace(path, 'oldstring', 'newstring')

43
where path like '%oldstring%'데이터가 많으면 일반적으로 추가 합니다.
Derek

1
테이블에 50 개의 행이 있고 replace 함수로 10 개의 행을 바꾸면 where 조건이없는 경우 10 개의 행을 대체하더라도 모든 50 개의 행에 영향을 미치기 때문에 조건은 의미가 있습니다. 그러나 위의 주석에서 언급 한 것과 같은 조건이있는 경우 10 행에만 영향을 미칩니다.
iMalek

132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')

죄송합니다. 10 년 후에도 이질적이지 않지만 foo교체되거나 bar (죄송합니다) 답변이 명확하지 않습니다
Alex

28

위의 시도했지만 올바른 결과를 얻지 못했습니다. 다음 중 하나가 수행됩니다.

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'

11
이것은 replace 메소드 사용의 목적을 완전히 상실합니다. 다음과 같은 작업을 수행 할 수 있습니다. update table set path = 'newstring'where path = 'oldstring';
Ian

11
아마도 당신은 의미 where path like '%oldstring%'?
v010dya 2016 년

17
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

CAST기능이 없으면 오류가 발생했습니다.

인수 데이터 유형 ntextreplace함수의 인수 1에 유효하지 않습니다 .


9

이 쿼리를 사용할 수 있습니다

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'

8

모든 답변은 훌륭하지만 좋은 예를 드리고 싶습니다.

select replace('this value from table', 'table',  'table but updated')

이 SQL 문은 주어진 명령문 (첫 번째 매개 변수) 내에 단어 "table"(두 번째 매개 변수)의 존재를 세 번째 매개 변수로 대체합니다.

초기 값은 this value from table 이지만 replace 기능을 실행 한 후에는this value from table but updated

그리고 여기 진짜 예가 있습니다

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

예를 들어이 값이 있다면

10.7440/perifrasis.2010.1.issue-1

그것은 될 것이다

10.25025/perifrasis.2010.1.issue-1

이것이 더 나은 시각화를 제공하기를 바랍니다.


6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

여기서 "ImagePath"는 내 열 이름입니다.
"NewImagePath"는 임시 열입니다. "ImagePath"의 이름 삽입
"~ /"는 현재 문자열입니다. (오래된 문자열)
"../"는 필요한 문자열입니다. (새 문자열)
"tblMyTable"은 데이터베이스의 테이블입니다.


4

대상 열 유형이 text 와 같은 varchar / nvarchar 이외의 경우 열 값을 문자열로 캐스트 한 후 다음과 같이 변환해야합니다.

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'

2

replace 기능을 사용하여 경로를 교체해야합니다.

update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

여기 column_name 변경하려는 열을 나타냅니다.

그것이 효과가 있기를 바랍니다.


0

런타임에 전자 메일 템플릿의 큰 텍스트를 바꿀 수도 있습니다. 여기 간단한 예가 있습니다.

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.