split کردن داده ها

abasfar

Member
سلام من یک procedure در msSql ساختم که ورودی به صورت زیر میباشد حالا میخوام

کد:
p='1,2,3,5,1448521455,6985,4' ; f=12 ; h =8552222222222222222

حالا میخوام ان رشته را جدا کنم از ',' و در جدول به صورت عدد که در زیر امده ذخیره کنم

PHP:
8552222222222222222|12|1
8552222222222222222|12|2
.
.
.
.
8552222222222222222|12|1448521455
.
.
در واقع رشته اول در بقیه رشته ها بعد از جدا شدن ضرب میشود
ممنون:rose:
 
خوب من یک مثال ساده می زنم .

PHP:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO




/*

scspsplit '42~1~13~2~4~42~1~<,>13~2~4~7~1~52~2~245~<,>56~1~4~2~245~<,>'


*/


ALTER Procedure scspsplit
@BacthData varchar(2000)
as

Declare @part VARCHAR(100), @remainingpart VARCHAR(100),
@balance VARCHAR(2000),@balancevar varchar(100),@var1 varchar(500),@counter int,@innercounter int

set @counter=0
while(@BacthData<>'')
BEGIN
--PRINT 'OUTER'
set @counter=@counter+1
SET @part = SUBSTRING(@BacthData,0,CHARINDEX('<,>',@BacthData))

SET @remainingpart=@part
print @part

--truncate table #setvalues
set @innercounter=0
while (@part<>'')
Begin
set @innercounter=@innercounter+1

set @var1= SUBSTRING(@part,0,CHARINDEX('~',@part))

insert into #setvalues values(@counter,@innercounter,@var1)

set @balancevar =SUBSTRING (@part,len(@var1)+2,len(@part))

SET @part=@balancevar

End

--select * from #setvalues

set @balance =SUBSTRING (@BacthData,len(@remainingpart)+4,len(@BacthData))

set @BacthData=@balance


END

--select * from #setvalues





GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

حالا شما رشته خودت رو الگو برداری کنید .
عذر می خوام اگه دیر جواب دادم . ( سر کار و هزار دردسر )
 

abasfar

Member
خوب من یک مثال ساده می زنم .

PHP:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO




/*

scspsplit '42~1~13~2~4~42~1~<,>13~2~4~7~1~52~2~245~<,>56~1~4~2~245~<,>'


*/


ALTER Procedure scspsplit
@BacthData varchar(2000)
as

Declare @part VARCHAR(100), @remainingpart VARCHAR(100),
@balance VARCHAR(2000),@balancevar varchar(100),@var1 varchar(500),@counter int,@innercounter int

set @counter=0
while(@BacthData<>'')
BEGIN
--PRINT 'OUTER'
set @counter=@counter+1
SET @part = SUBSTRING(@BacthData,0,CHARINDEX('<,>',@BacthData))

SET @remainingpart=@part
print @part

--truncate table #setvalues
set @innercounter=0
while (@part<>'')
Begin
set @innercounter=@innercounter+1

set @var1= SUBSTRING(@part,0,CHARINDEX('~',@part))

insert into #setvalues values(@counter,@innercounter,@var1)

set @balancevar =SUBSTRING (@part,len(@var1)+2,len(@part))

SET @part=@balancevar

End

--select * from #setvalues

set @balance =SUBSTRING (@BacthData,len(@remainingpart)+4,len(@BacthData))

set @BacthData=@balance


END

--select * from #setvalues





GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

حالا شما رشته خودت رو الگو برداری کنید .
عذر می خوام اگه دیر جواب دادم . ( سر کار و هزار دردسر )

استاد خواهش میکنم ممنون از لطف شما:rose:
 

abasfar

Member
دوست عزیز متاسفانه این error را داد
PHP:
42~1~13~2~4~42~1~
Msg 208, Level 16, State 0, Line 24
Invalid object name '#setvalues'.
این کد اضافه کردم
PHP:
declare @table table (counter int, innercounter int, var1 varchar(500))
مشکل ارور حل شد اما سه جدول درست میکنند و برمیگردانند
 
آخرین ویرایش:

abasfar

Member
کد رابه این صورت تغییر دادم شد
PHP:
Declare @BacthData varchar(2000)
set @BacthData='1,2,3|4,5,6|7,8,9'

Declare @part VARCHAR(100), @remainingpart VARCHAR(100), 
@balance VARCHAR(2000),@balancevar varchar(100),@var1 varchar(500),@counter int,@innercounter int 
declare @table table (counter int, innercounter int, var1 varchar(500)) 

set @counter=0 
while(@BacthData<>'') 
BEGIN 
--PRINT 'OUTER' 
set @counter=@counter+1 
SET @part = SUBSTRING(@BacthData,0,CHARINDEX('|',@BacthData)) 

SET @remainingpart=@part 
print @part 

--truncate table #setvalues 
set @innercounter=0 
while (@part<>'') 
Begin 
set @innercounter=@innercounter+1 

set @var1= SUBSTRING(@part,0,CHARINDEX(',',@part)) 

insert into @table values(@counter,@innercounter,@var1) 

set @balancevar =SUBSTRING (@part,len(@var1)+2,len(@part)) 

SET @part=@balancevar 

End 

--select * from #setvalues 

set @balance =SUBSTRING (@BacthData,len(@remainingpart)+4,len(@BacthData)) 

set @BacthData=@balance 


END 

select * from @table
خروجی
PHP:
1	1	1
1	2	2
1	3	
2	1	5
2	2
که کاملا اشتباه است
کد اول هم همین را خروجی میده
 

جدیدترین ارسال ها

بالا