SplitString SQL服务器

时间:2016-01-29 16:46:42

标签: sql sql-server

以下分割功能效果很好。但它改变了我输入的顺序。 请帮助我获得所需的输出。

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

输入

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

预期产出

1
3
2

不是

1
2
3

2 个答案:

答案 0 :(得分:1)

您需要使用Order by来获得所需的结果。请尝试更改Split字符串函数,如下所示

试试这种方式

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 

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

答案 1 :(得分:0)

SQL中的数据集本质上是无序的。当您需要显式订单时,您必须明确请求/创建它。这可以使用ORDER BY子句或前端的代码来完成。