2016-01-29 92 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子句或通過前端代碼完成。