-- 示例数据 DECLARE @t TABLE(ID int, Work varchar(8000)) INSERT @t SELECT 1, '高层管理人员$学生$老师$职员$私营老板$专业人员'-- 分拆处理 SELECT TOP 8000 id = IDENTITY(int,1,1) INTO # FROM syscolumns a, syscolumns b SELECT A.ID, Work = SUBSTRING(A.Work, B.id, CHARINDEX('$', A.Work + '$', B.id) - B.id) FROM @t A, # B WHERE SUBSTRING('$' + A.Work, B.id, 1) = '$' DROP TABLE #-- 结果 ID Work ----------- ----------------- 1 高层管理人员 1 学生 1 老师 1 职员 1 私营老板 1 专业人员(6 行受影响)
create FUNCTION dbo.f_split_string(@s varchar(8000),@c varchar(10)) RETURNS @t TABLE(work varchar(8000)) AS BEGIN DECLARE @i int,@l int SELECT @i=CHARINDEX(@c,@s),@l=LEN(@c) WHILE @i>0 BEGIN INSERT @t(work) VALUES(LEFT(@s,@i-1)) SELECT @s=STUFF(@s,1,@i+@l-1,''),@i=CHARINDEX(@c,@s) END INSERT @t(work) VALUES(@s) RETURN END GO SELECT * FROM dbo.f_split_string('高层管理人员$学生$老师$职员$私营老板$专业人员','$')
DECLARE @t TABLE(ID int, Work varchar(8000))
INSERT @t SELECT 1, '高层管理人员$学生$老师$职员$私营老板$专业人员'-- 分拆处理
SELECT TOP 8000 id = IDENTITY(int,1,1) INTO # FROM syscolumns a, syscolumns b
SELECT A.ID, Work = SUBSTRING(A.Work, B.id, CHARINDEX('$', A.Work + '$', B.id) - B.id)
FROM @t A, # B
WHERE SUBSTRING('$' + A.Work, B.id, 1) = '$'
DROP TABLE #-- 结果
ID Work
----------- -----------------
1 高层管理人员
1 学生
1 老师
1 职员
1 私营老板
1 专业人员(6 行受影响)
RETURNS @t TABLE(work varchar(8000))
AS
BEGIN DECLARE @i int,@l int
SELECT @i=CHARINDEX(@c,@s),@l=LEN(@c)
WHILE @i>0
BEGIN
INSERT @t(work) VALUES(LEFT(@s,@i-1))
SELECT @s=STUFF(@s,1,@i+@l-1,''),@i=CHARINDEX(@c,@s)
END
INSERT @t(work) VALUES(@s)
RETURN
END
GO
SELECT * FROM dbo.f_split_string('高层管理人员$学生$老师$职员$私营老板$专业人员','$')