text형식에서 replace > db

본문 바로가기
사이트 내 전체검색

db

text형식에서 replace

페이지 정보

작성자 서방님 댓글 0건 조회 163회 작성일 06-08-31 16:46

본문

안녕하세요?
저는 웹 개발자입니다.
몇일동안 고민을 하다가 방법이 없어서 이렇게 질문을 올립니다.

데이터베이스 테이블중 하나의필드가 ntext 입니다.
이 필드에는 10000자가 넘는 글들이 있습니다.
해서 불필요한 문자를 없애고자 합니다.

ntext 필드에 데이터를 replace 하려면 어떻게 할수 있나요?
좋은 답변 부탁드립니다. 그럼 수고 하시구요.

PS. 꽁수가 아닌 정식 Query 문장으로 승부를 내고 싶습니다.

========================================================================


text형의 경우 일반 replace문으로는 처리가 안되지요.

t-sql문을 가지고 replace할려면 patindex 를 가지고 loop를 돌려서 하나하나
처리해주셔야 합니다.
아래 예제가 있으니 참고하세요.

UPDATETEXT
기존의 text, ntext 또는 image 필드를 업데이트합니다. UPDATETEXT를 사용하면
text, ntext, image 열의 일부만 변경됩니다.
WRITETEXT를 사용하면 text, ntext 또는 image 필드 전체가 업데이트되고 대체됩니다.

구문
UPDATETEXT { table_name.dest_column_name dest_text_ptr }
    { NULL | insert_offset }
    { NULL | delete_length }
     [ WITH LOG ]
    [ inserted_data
        | { table_name.src_column_name src_text_ptr } ]

ex)
--테스트를 위한 샘플을 만들고
--drop table a
create table a(pub_id char(4), info ntext)
go
insert into a
   select pub_id, pr_info from pubs..pub_info where pub_id = '0736'

--text field를 replace해보자
--이 예제에서는 'this' 라는 문자열을 '가' 라는 문자열로 replace

select * from a where pub_id = '0736'
           
pub_id
info                                                                                                                                                       
                                                                                                    
------ -----------------------------------------
0736   This is sample text data for New Moon Books...

select datalength(info) from a where pub_id = '0736'
           
-----------
130142

(1개 행 적용됨)


declare @replacestr varchar(10)
declare @deletestr varchar(10)
declare @ptr varbinary(16)
declare @len int
declare @offset int
declare @cnt int

set @deletestr = 'this'
set @replacestr = '가'
select @ptr = textptr( info ) from a where pub_id = '0736'
set @len = len( @deletestr )
set @cnt = 0

while(1=1)   --일단 무한 loop로 돌려놓고
begin
   select @offset = patindex('%'+@deletestr+'%', info ) from a where pub_id = '0736'
   if @offset = 0
      begin
         break
      end
   else
      begin
         set @offset = @offset - 1
         updatetext a.info @ptr @offset @len @replacestr
         set @cnt = @cnt + 1
      end
end
select convert(varchar(10), @cnt) + ' 개 replace'
go

---------------------
475 개 replace

(1개 행 적용됨)

--replace 되어서 size가 줄어든것을 확인...
select datalength(info) from a where pub_id = '0736'

-----------
127292

(1개 행 적용됨)

--정말로 replace 되었나 확인...
select * from a where pub_id = '0736'
           
pub_id
info                                                                                                                                                       
                                                                                                    
------ -----------------------------------------
0736   가 is sample text data for New Moon Books...

댓글목록

등록된 댓글이 없습니다.

Total 464건 31 페이지
게시물 검색

회원로그인

접속자집계

오늘
85
어제
84
최대
1,347
전체
154,456
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.