sqlserver 迴圈擷取欄位中的某些字元

2022-01-14 01:16:36 字數 2329 閱讀 8483

--迴圈按固定長度擷取

--cj2249301801,cj2249300803,cj2249301901,cj2249302003 擷取 形式301,300,301,302

create function [dbo].[fn_loopsubstring](

@string nvarchar(max),

@spchar char(1),

@strlen int,

@eachstrenoughlenstartindex int,

@eachstrenoughlenendindex int,

@eachstrnotenoughlenstartindex int,

@eachstrnotenoughlenendindex int

)returns nvarchar(max)

asbegin

--declare @string as nvarchar(max) -- 源字串,子串間用分隔符隔開

--declare @spchar as char(1) -- 分隔符

--declare @strlen int

--declare @eachstrenoughlenstartindex int

--declare @eachstrenoughlenendindex int

--declare @eachstrnotenoughlenstartindex int

--declare @eachstrnotenoughlenendindex int

--set @spchar=',' -- 分隔符

--set @string='cj2249301801,cj2249300803,cj2249301901,cj2249302003'

--set @strlen=12

--set @eachstrenoughlenstartindex=6

--set @eachstrenoughlenendindex=3

--set @eachstrnotenoughlenstartindex=1

--set @eachstrnotenoughlenendindex=3

declare @startindex as int -- 起點

declare @endindex as int -- 結束點

declare @log as nvarchar(max) -- 執行記錄

declare @count as int -- 查詢次數

-- 源字串,起點不包含分隔符,結束包含分隔符

set @startindex=0 -- 0位置為初起點

set @log=''

set @count=1

select @endindex=charindex(@spchar,@string);-- 第1個分隔符位置為結束點

-- charindex找不到字串時,返回0.迴圈成立條件是能找到分隔符

while @endindex>0

begin

declare @substr as nvarchar(20) -- 子字串

-- 根據起止點及起止點之差為長度找出子字串

select @substr=substring(@string,@startindex,@endindex-@startindex)

-- 下一起點為當前止點加1

set @startindex=@endindex+1

-- 查詢下一分隔符位置,即新的止點

set @endindex=charindex(@spchar,@string,@startindex);

if len(@substr)>=@strlen

begin

set @substr=substring(@substr,@eachstrenoughlenstartindex,@eachstrenoughlenendindex)

end;

else

begin

set @substr=substring(@substr,@eachstrnotenoughlenstartindex,@eachstrnotenoughlenendindex)

end;

if @count=1

begin

set @log=@log+@substr

end;

else

begin

set @log=@log+@spchar+@substr

end;

set @count=@count+1

endreturn @log

end;

awk擷取字段

file 期望每行刪除第二個 之前的內容,得到 isbctruncate 1 socialtime 1 nettype mobile isbctruncate 1 socialtime 1 nettype pc 我的處理方法是 awk f file 從第三個字元開始處理,並且以 為分隔符,因為最後乙...

oracle中substr函式(擷取字段)

所使用函式 substr string,start,length string 索要擷取的字串 start 從第幾個字元開始,0 1都是從頭開始 length 要擷取字元的長度,不寫預設擷取 到結束的字元 以上例項第一列是原欄位,第二列是從0開始,擷取長度2,第三列是1開始,擷取長度2,可以看出所擷...

mysql按關鍵符號擷取字段

比如以下字段內容,我要擷取以 為分割的部分內容 banner 2 1 png gcjx e extend uploadimg upload upload files 2020 07 02 9d2cba0773d47bad2cc8f8f36ee0a344.png 35231 banner 2.png ...