有時候在DB欄位中會將資料以連結符號例如逗號串接成字串,如果我們希望將這類型的資料再取出成為其他子查詢的條件,可以先透過function將字串處理為table使用,function範例如下:
' 輸 入 值 : @String : 使用逗號或某種截斷符號的字串。
' @Delimiter : 截斷符號。(通常為逗號)
'
' 回 傳 值 : 分割資料完成的資料表,欄位名稱為[SerialNo]。
'
CREATE FUNCTION BASE.fnSplit(@String nvarchar(max), @Delimiter char(1))
returns @temptable TABLE (SerialNo nvarchar(max))
as
begin
declare @idx int
declare @slice nvarchar(max)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(SerialNo) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
GO
建立function後,就可以在SELECT語法中直接使用
(注意[SchemaName]如果沒有指定Schema就不需要)
SELECT [SerialNo] from [SchemaName].fnSplit('1,2,3,4,5',',')
結果如下圖:
沒有留言:
張貼留言