ntext欄位替換

2022-02-19 17:03:18 字數 2873 閱讀 1677

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欄位拆分處理 ...