3.7.5
ntext欄位的replace處理示例.sql
--測試資料
create
table
tb(col
ntext
)insert
tb values
(replicate( '
0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'+
'220000001,302000004,500200006,700002008,900002120,',
800))
declare
@pbinary(16
)select@p=
textptr
(col)
from
tbupdatetext
tb.col
@pnull
0tb.col
@pgo
--替換處理定義
declare
@s_str
nvarchar
(1000
),@r_str
nvarchar
(1000
)select
@s_str='
00'--要替換的字串
,@r_str='
0000'--
替換成該字串
declare
@pvarbinary(16
)declare
@start
int,
@snvarchar
(4000
),@len
intdeclare
@s_len
int,
@step
int,
@last_repl
int,
@pos
int--
替換處理引數設定
select
--用於要判斷每次擷取資料,最後乙個被替換資料位置的處理
@s_len
=len
(@s_str
),--
設定每次應該擷取的資料的長度,防止replace後資料溢位
@step
=case
when
len(
@r_str
)>
len(
@s_str
)then
4000
/len
(@r_str)*
len(
@s_str
)else
4000
end--
替換處理的開始位置
select
@start
=patindex('
%'+@s_str+'
%',col),@p=
textptr
(col),@s=
substring
(col,
@start
,@step
),@len
=len(@s
),@last_repl=0
from
tbwhere
patindex('
%'+@s_str+'
%',col)
>
0and
textvalid('
tb.col',
textptr
(col))=1
while
@len
>=
@s_len
begin
--得到最後乙個被替換資料的位置
while
charindex
(@s_str,@s
,@last_repl
)>
0set
@last_repl
=@s_len
+charindex
(@s_str,@s
,@last_repl)--
如果需要,更新資料,同時判斷下乙個取數字置的偏移量
if@last_repl=0
set@last_repl
=@s_len
else
begin
select
@last_repl
=case
when
@len
<
@last_repl
then
1when
@len
-@last_repl
>=
@s_len
then
@s_len
else
@len
-@last_repl+2
end,@s=
replace(@s
,@s_str
,@r_str
),@pos
=@start-1
updatetext
tb.col
@p@pos
@len
@send
--獲取下乙個要處理的資料
select
@start
=@start
+len(@s
)-@last_repl+1
,@s=substring
(col,
@start
,@step
),@len
=len(@s
),@last_repl=0
from
tbend
go--
顯示處理結果
select
datalength
(col),
*from
tbdrop
table
tb
ntext資料型別欄位中的內容替換
1。varchar和nvarchar型別是支援replace,所以如果你的text不超過8000可以先轉換成前面兩種型別再使用replace。update 表名 set 欄位名 replace convert varchar 8000 欄位名 要替換的字元 替換成的值 2。如果你的text大於800...
Ntext欄位拆分處理
if exists select from dbo.sysobjects where id object id n dbo p split and objectproperty id,n isprocedure 1 drop procedure dbo p split go ntext欄位拆分處理 ...
Ntext欄位拆分處理
if exists select from dbo.sysobjects where id object id n dbo p split and objectproperty id,n isprocedure 1 drop procedure dbo p split go ntext欄位拆分處理 ...