前言
專案中需要將乙個拼接好的字串作為引數傳入儲存過程中,而在儲存過程中需要將字串拆開,下面來看一下實現過程。
正文介面接收一系列pcb序列號,在儲存過程中將傳入的一系列序列號取出來一一關聯,也就是說將傳進來的一系列序列號分為一組,並且過站操作(記錄一下)。
alter procedure [dbo].[cp_pm_pcb_bind]
@lotids nvarchar(1000), --pcb編號
@orderid nvarchar(64),
@defid nvarchar(64),
@stepid nvarchar(64),
@stationid nvarchar(64),
@machineid nvarchar(64),
@userid nvarchar(64),
@ispcb
int,
@returnmessage nvarchar(1000) out
asbegin
begin try
begin tran
declare @split varchar(2) --分隔符
declare @count
int --統計,出現的次數
set @returnmessage= 'ok'
set @lotids = substring(@lotids,1,len(@lotids)-1)--去掉最後乙個,
set @lotids=ltrim(rtrim(@lotids)) --傳進來需要擷取的字串
set @split=','
set @count = len(@lotids)-len(replace(@lotids,@split,''))
if@ispcb = 0
and@count !=0
begin
declare @pcbid nvarchar(64) --多個pcb關聯組的pcb號
declare @baseid nvarchar(64) --底座/底殼條碼
declare @location
int --',' 分隔符第一次出現的位置
declare @start
int --起始字串索引
declare @seed
int
declare @length
int
declare @templotid nvarchar(64) --臨時存放@lotid
set @ispcb = 1 --預設已經關聯
set @pcbid = newid()
set @length =len(@lotids)
set @start=1
set @seed=len(@split)
set @location=charindex(@split,@lotids)
while
@location
<>0
begin
--每乙個pcb條碼
set @templotid=substring(@lotids,@start,@location-@start)
insert into [dbo].[mm_lots_pcb] (lotid,pcbid,createdby,createdon,attribute01,attribute02,attribute03,attribute04,attribute05,attribute06)
values (@templotid,@pcbid,@userid,getdate(),'','','','','','')
set @start=@location+@seed
set @location=charindex(@split,@lotids,@start)
endset @templotid=substring(@lotids,@start,@length)
insert into [dbo].[mm_lots_pcb] (lotid,pcbid,createdby,createdon,attribute01,attribute02,attribute03,attribute04,attribute05,attribute06)
values (@templotid,@pcbid,@userid,getdate(),'','','','','','')
--pcb拼板過站
exec [dbo].[cp_pm_wip_pcb] @templotid,@orderid,@defid,@stepid,@stationid,@ispcb,@userid,null,@returnmessage out
endcommit tran
end try
begin catch
rollback tran
set @returnmessage = error_message()
raiserror(@returnmessage,16,1)--丟擲異常
備註儲存過程中用到的substring 中的字串索引是從1開始的,並且使用座標索引,如果start的值為0或負數,則只返回那些所在位置大於零的字元;如果start的值大於字串的長度,則返回null值。
當start的值為0或者負數時,擷取長度為:length - |(start - 1)|
應用
declare @substring int
begin tran
set @substring = charindex('h','hello,kitty!',1);
--1 print @substring
set @substring = charindex('l','hello,kitty',2);
--3 print @substring
set @substring = charindex('k','hello,kitty',7);
--7 print @substring
--如果在expression2內找不到expression1,則charindex返回0
備註charindex的索引也是從1 開始的。
總結
sql 擷取字串
sql 擷取字串 a.擷取從字串左邊開始n個字元 declare s1 varchar 100 select s1 select left s1,4 顯示結果 http b.擷取從字串右邊開始n個字元 例如取字元www.163.com declare s1 varchar 100 select s1...
SQL擷取字串
substring 返回字元 binary text 或 image 抒發式的一全體。無關可與當函式一伏運用的無效 microsoft sql server 資料種型的更多疑息,請參睹資料種型。語法 substring expression start length 引數 expression 是字...
SQL擷取字串
substring 返回字元 binary text 或image 表示式的一部分。有關可與該函式一起使用的有效 microsoft sql server 資料型別的更多資訊,請參見資料型別。語法substring expression start length 引數expression 是字串 二...