2017-07-17 62 views
-2

如何將包含10個值的逗號分隔行分成兩行,其中第一行具有前5個值,下一行具有SQL Server中的最後5個值在SQL Server中將逗號分隔的字符串分成2行

+1

你搜索分割字符串函數在Sql Server中?順便說一句你使用的是哪個版本的sql server? –

+0

請將一些示例數據和預期結果作爲DDL發佈,並顯示您的嘗試 – TheGameiswar

+0

這並不難。你可以使用任何包含行號的字符串拆分函數(或者爲你自己定製一個字符串,但是字符串拆分函數不難找到),那麼你可以用一個mod函數使用case aggregation(例如'SELECT Val1 = MAX(當RN%5 = 1,則VAL END),Val2 = MAX(當RN%5 = 2則VAL END)...)和group by(RN-1)/ 5 – ZLK

回答

0

這只是一個例子,你如何使它工作

CREATE TABLE T 
(ColSplit varchar(100) 
) 

INSERT INTO T VALUES 
('a,b,c,d,e,f,g,h,i,j'); 

SELECT VALUE 
FROM STRING_SPLIT((SELECT ColSplit FROM T),',') 

參考這裏瞭解更多信息有關STRING_SPLIT

0

你真的應該重新考慮你的數據庫設計。
正如我在評論中寫的,在數據​​庫中存儲分隔列表是一個糟糕的設計。

但是,如果由於某種原因,你不能改變數據庫的設計, 你可以做這樣的事情:

DECLARE @MyString varchar(100) = 'a,bc,def,ghij,klmno,pqrstu,vwxyz12,34567890,1qaz2wsx3,edc4rfv5tg,b6yhn7ujm' 


;WITH CTE AS 
(
    SELECT @MyString As string, 
      CHARINDEX(',', @MyString) As commaIndex, 
      1 as commaNumber 
    UNION ALL 
    SELECT string, 
      CHARINDEX(',', string, commaIndex + 1), 
      commaNumber + 1 
    FROM CTE 
    WHERE CHARINDEX(',', string, commaIndex + 1) > 0 
) 


SELECT SUBSTRING(string, 1, commaIndex-1) 
FROM CTE 
WHERE commaNumber = 5 

UNION ALL 

SELECT SUBSTRING(string, commaIndex+1, LEN(string)) 
FROM CTE 
WHERE commaNumber = 5 

結果:

a,bc,def,ghij,klmno 
pqrstu,vwxyz12,34567890,1qaz2wsx3,edc4rfv5tg,b6yhn7ujm 
相關問題