ntext資料型別欄位中的內容替換

2021-09-30 07:32:31 字數 2499 閱讀 9203

1。varchar和nvarchar型別是支援replace,所以如果你的text不超過8000可以先轉換成前面兩種型別再使用replace。

update   表名  

set   欄位名=replace(convert(varchar(8000),欄位名), '要替換的字元 ', '替換成的值 ')

2。如果你的text大於8000,可以用下面的方法:

--測試資料

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   @p   binary(16)

select   @p=textptr(col)   from   tb

updatetext   tb.col   @p   null   0   tb.col   @p

go --替換處理定義

declare   @s_str   nvarchar(1000),@r_str   nvarchar(1000)

select   @s_str= '00 '     --要替換的字串

,@r_str= '0000 '     --替換成該字串

declare   @p   varbinary(16)

declare   @start   int,@s   nvarchar(4000),@len   int

declare   @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   tb

where   patindex( '% '+@s_str+ '% ',col)> 0

and   textvalid( 'tb.col ',textptr(col))=1

while   @len> =@s_len

begin

--得到最後乙個被替換資料的位置

while   charindex(@s_str,@s,@last_repl)> 0

set   @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   1

when   @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   @s

end

--獲取下乙個要處理的資料

select   @start=@start+len(@s)-@last_repl+1,

@s=substring(col,@start,@step),

@len=len(@s),

@last_repl=0

from   tb

end

go --顯示處理結果

select   datalength(col),*   from   tb

drop   table   tb

上面說的是針對ntext欄位的替換處理,如果要處理text欄位,只需要先轉換成ntext欄位然後儲存在臨時表裡面,處理完以後再從臨時表寫回text就行了。

其實一般象text,ntext欄位這些都是抓到程式裡面去處理的。

資料庫中欄位型別對應C 中的資料型別

資料庫 c 程式 int int32 text string bigint int64 binary system.byte bit boolean char string datetime system.datetime decimal system.decimal float system.do...

Access中的資料型別和字段屬性

資料型別 用途 文字字元 數字或字元與數字的任意組合,不能用於計算。最長255個字元,預設長度為50個字元。對於指定的大小,存放中文漢字與英文本母的個數都是一樣的 備註超長的文字,用於注釋或說明,最長65535個字元 數字用於計算的值,1 2 4或8位元組 日期 時間 表示日期和時間,可用於計算,最...

資料庫中欄位型別對應的C 中的資料型別

microsoft zh.cn原文 資料庫中欄位型別對應的c 中的資料型別 2016.4 資料庫 c 程式 int int32 text string bigint int64 binary system.byte bit boolean char string datetime system.da...