现在一张表ID,   Work
1     高层管理人员$学生$老师$职员$私营老板$专业人员ID为流水号,Work为职业,是一个用$拼接起来的字符串
现在想转化成如下开式Work
高层管理人员
学生
老师
职员
私营老板
专业人员

解决方案 »

  1.   

    -- 示例数据
    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 行受影响)
      

  2.   

    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('高层管理人员$学生$老师$职员$私营老板$专业人员','$')