บน mssql 2008 ไม่มี split() ให้ใช้ ผมเลยหาเจออันนี้ คิดว่าน่าจะแทนได้ เลยลองทำดู
ถ้าไม่มี SET @v = @v+@x +';'
ค่อย ๆ print @x ออกมาเลย จะได้ค่า ข้างในเป็น
10
12.5
33
ตามลำดับ แต่พอต้องการให้มัน Join ออกมาเป็น string เดียว เพื่อผมจะไปหา WHERE [FieldDetail] like '.5%33%'
คำถาม : ไม่ทราบว่า SET @v = @v+@x +',' มันผิดทำให้เป็น null หรือเปล่าครับ? ต้องแก้ไขอย่างไร
DECLARE @v varchar(max)
DECLARE @x varchar(20)
declare @xml xml
set @xml = N'<root><r>' + replace('10,12.5,33',',','</r><r>') + '</r></root>'
--print cast(@xml as varchar(max))
DECLARE C cursor for
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
OPEN C
fetch next from C into @x
WHILE (@@FETCH_STATUS = 0)
BEGIN
print @x
SET @v = @v+@x +','
fetch next from C into @x
END
CLOSE C
DEALLOCATE C
--PRINT LEFT(@x,LEN(@x)-1)
print @v -- อยากได้ 10,12.5,33
mssql 2008 stored procedure split string
ถ้าไม่มี SET @v = @v+@x +';'
ค่อย ๆ print @x ออกมาเลย จะได้ค่า ข้างในเป็น
10
12.5
33
ตามลำดับ แต่พอต้องการให้มัน Join ออกมาเป็น string เดียว เพื่อผมจะไปหา WHERE [FieldDetail] like '.5%33%'
คำถาม : ไม่ทราบว่า SET @v = @v+@x +',' มันผิดทำให้เป็น null หรือเปล่าครับ? ต้องแก้ไขอย่างไร
DECLARE @x varchar(20)
declare @xml xml
set @xml = N'<root><r>' + replace('10,12.5,33',',','</r><r>') + '</r></root>'
--print cast(@xml as varchar(max))
DECLARE C cursor for
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
OPEN C
fetch next from C into @x
WHILE (@@FETCH_STATUS = 0)
BEGIN
print @x
SET @v = @v+@x +','
fetch next from C into @x
END
CLOSE C
DEALLOCATE C
--PRINT LEFT(@x,LEN(@x)-1)
print @v -- อยากได้ 10,12.5,33