摘要:[sql]Split2Table的function(split)
USE [Northwind]
GO
/****** Object: UserDefinedFunction [dbo].[ufn_Split2Table] Script Date: 06/22/2012 11:30:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: <20120621>
-- Description: <將傳進來的字串切割之後傳回table>
-- =============================================
ALTER FUNCTION [dbo].[ufn_Split2Table]
(
@input nvarchar(4000), --等待切割的字串(ex:30,80,77)
@delimeter varchar(10) --分隔字員
)
RETURNS
@tblReturn TABLE (item1 nvarchar(60))
AS
BEGIN
-- Fill the table variable with the rows for your result set
DECLARE @pIndex smallint
WHILE (@input<>'')
BEGIN
SET @pIndex = patindex('%'+@delimeter+'%', @input)
IF @pIndex=0 SET @pIndex = len(@input) + 1
--插入暫存table中
INSERT INTO @tblReturn (item1)VALUES (substring(@input, 1, @pIndex - 1))
IF @pIndex=LEN(@input)+1 BREAK--表示已經沒有分隔字元了
--將input中已經插入table的數字,刪除
SET @input = substring(@input, @pIndex + 1, len(@input) - @pIndex)
END
RETURN
END
使用方式如下:
DECLARE @tmp varchar(100)
DECLARE cur cursor for
SELECT * from dbo.ufn_Split2Table('abc*777','*')
OPEN cur
FETCH next from cur into @tmp
WHILE(@@fetch_status = 0)
begin
print (@tmp)
fetch next from cur into @tmp
end
參考網路神人文章
改用patindex改寫而成,自己做個筆記
這個函數的中心精神就是一個一個目標抓出來然後insert到temp table,然後一個一個從原本的字串刪除