2016-01-29 58 views
0

下面的Split功能运行良好。但它改变了我的输入顺序。 请帮助我获得所需的输出。SplitString SQL服务器

关于http://www.codeproject.com/Tips/85943/Split-function

输入

SELECT * from dbo.fnStringSplitter('1,3,2', ',') 

期望输出

1 
3 
2 

1 
2 
3 
+0

为什么你的预期产量是1,3,2? – Lamak

+0

你通过1,2,3,你想要1,3,2。我想你是改变顺序不拆分字符串功能 –

+0

由问题编辑。请工作和回扣。这是合理的问题 – jamir

回答

1

您需要通过使用才能获得结果所需的顺序尝试改变这样的分割字符串函数

尝试这种方式

CREATE FUNCTION dbo.Fnstringsplitter (@string NVARCHAR(MAX), 
             @delimiter VARCHAR(2)) 
RETURNS @result TABLE(
    id  INT IDENTITY(1, 1), 
    split_val NVARCHAR(MAX)) 
    BEGIN 
     DECLARE @start INT, 
       @end INT 

     SELECT @start = 1, 
      @end = Charindex(@delimiter, @string) 

     WHILE @start < Len(@string) + 1 
     BEGIN 
      IF @end = 0 
       SET @end = Len(@string) + 1 

      INSERT INTO @result 
         (split_val) 
      VALUES  (Substring(@string, @start, @end - @start)) 

      SET @start = @end + 1 
      SET @end = Charindex(@delimiter, @string, @start) 
     END 

     RETURN 
    END 

查询:

SELECT split_val 
FROM dbo.Fnstringsplitter('1,3,2', ',') 
ORDER BY id 

注:这不是分割数据的有效方式。但在你的情况下可靠

+0

这看起来不错。我会测试并将其标记为已回答。我需要的功能。你很努力。把它当作功能 – jamir

+0

@jamir - 已更新检查 –

+0

请稍候。将验证并标记。 – jamir

0

SQL中的数据集本质上是无序的。当你需要一个明确的命令时,你必须明确地请求/创建它。这可以使用ORDER BY子句或通过前端代码完成。