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...
댓글목록
등록된 댓글이 없습니다.