首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个拆分字符串的有关问题

2012-12-18 
请教一个拆分字符串的问题createFUNCTION [dbo].[FN_SplitData](@delimited NVARCHAR(MAX),@delimiter NVA

请教一个拆分字符串的问题

create  FUNCTION [dbo].[FN_SplitData](
  @delimited NVARCHAR(MAX),
  @delimiter NVARCHAR(100)
) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
  DECLARE @xml XML
  SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'

  INSERT INTO @t(val)
  SELECT r.value('.','varchar(MAX)') as item
  FROM @xml.nodes('/t') as records(r)
  RETURN
END


declare @Questions varchar(MAX)='1-32|26,42-41|32'
;WITH CTE1 AS(
                SELECT  id, LEFT(val, CHARINDEX('-', val)-1) AS QuestionId, SUBSTRING(val, CHARINDEX('-', val)+1, 100) AS [IndexNumber]
               , SUBSTRING(val, CHARINDEX('|', val)+1, 100) AS Numbers
                FROM    [dbo].[FN_SplitData](@Questions,',')
                )
      
 select QuestionId,[IndexNumber],Numbers from CTE1
 --得到的是下面的结果,但是不是我想要的
 /*
 QuestionIdIndexNumberNumbers
132|2626
4241|3232
 */
 --下面的才是我想要的
/*
QuestionId IndexNumberNumbers
1    32         26
42    41         32
*/
--求帮忙修改一下代码

[最优解释]


DECLARE
    @S VARCHAR(MAX)
   ,@Split1 CHAR(1)
   ,@Split2 CHAR(1)
   ,@Split3 CHAR(1)
   ,@X XML


SELECT
    @S = '1-32

热点排行