微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不用XML的字符串切分表值函数

--先增加辅助表
SET NOCOUNT ON
DECLARE @i INT,@iMax INT
SET @iMax=100000
INSERT INTO spt_values (number) VALUES(1)
WHILE 1=1 
BEGIN
    SELECT @i=MAX(number) FROM spt_values
    IF @i<=@imax/2
    BEGIN
        INSERT INTO spt_values (number)
        SELECT @i+number FROM spt_values ORDER BY number
    END
    ELSE
    BEGIN
        INSERT INTO spt_values (number)
        SELECT TOP( @iMax-@i ) @i+number FROM spt_values ORDER BY number
        BREAK;
    END
END
GO
--创建表值函数
IF OBJECT_ID('[dbo].[Fun_SplitStr]') IS NOT NULL
	DROP FUNCTION [dbo].[Fun_SplitStr]
GO
-- =============================================
-- Author:		yenange
-- Create date: 2017-01-11
-- Description:	字符串切分函数(以逗号为切分符)
-- =============================================
CREATE FUNCTION [dbo].[Fun_SplitStr] 
(	
	@str NVARCHAR(MAX)
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT SUBSTRING(@str,b.number,CHARINDEX(',',@str + ',b.number) -b.number) AS item
	FROM   dbo.spt_values b
	WHERE  
		   
		   b.number BETWEEN 1 AND LEN(@str)
		   AND SUBSTRING(',' + @str,1) = ','
		   --AND ISNULL(SUBSTRING(@str,b.number) -b.number),'')!=''
)

用 master..spt_values 也行, 但最大才2047, 不够用。

与xml那个切分函数对比, 效率上也没有优势。 不过也算另一种思维, 特此记之。

原文地址:https://www.jb51.cc/xml/294485.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。