2016-03-18 193 views
0

我有一列有多個值存儲在一列中的列表我想將該數據查詢到一個文件並將值分開。將列中的多個值拆分爲單獨的列

示例:此列(SHIFT_LENGTHS)的值以星號的每一天的連接形式存儲,以「#」作爲分隔符,表示一週中某天的秒數。

SELECT 
    NAME 
,SHIFT_LENGTHS 
FROM SHIFTGUARANTEE 
ORDER BY NAME 

SQL結果

NAME ,SHIFT_LENGTHS 
Shift1,#14400#14400#14400#14400#14400#14400#14400# 

我要查詢的數據,並通過這種方式目前它在文件中:

NAME ,Mon ,Tue ,Wed ,Thu ,Fri ,Sat ,Sun 
Shift1,14400,14400,14400,14400,14400,14400,14400 
+0

我覺得這個回答不同的問題是你可以使用 - [我該如何分割字符串,所以我可以訪問項x ?](https://stackoverflow.com/a/2677/352349)。 – Anssssss

+0

可能的重複[如何分割字符串,以便可以訪問項目x?](http://stackoverflow.com/questions/2647/how-do-i-split-a-string-so-i-can- access-item-x) –

+1

雖然我同意你需要一個字符串分離器,但是上面引用的是從性能角度可以找到的絕對最糟糕的可能。不要使用使用循環或遞歸類的分離器。他們很壞。這裏有一些更好的選擇。 http://sqlperformance.com/2012/07/t-sql-queries/split-strings –

回答

1

如果字符串的格式是固定的,因爲它似乎你可以用子串函數來解析它:

SELECT 
    NAME 
,SUBSTRING(SHIFT_LENGTHS, 2, 5) mon 
,SUBSTRING(SHIFT_LENGTHS, 8, 5) tue 
,SUBSTRING(SHIFT_LENGTHS, 14, 5) wed 
,SUBSTRING(SHIFT_LENGTHS, 20, 5) thu 
,SUBSTRING(SHIFT_LENGTHS, 26, 5) fri 
,SUBSTRING(SHIFT_LENGTHS, 32, 5) sat 
,SUBSTRING(SHIFT_LENGTHS, 38, 5) sun 
FROM SHIFTGUARANTEE 
ORDER BY NAME 

如果格式不固定,可以使用charindex函數獲取分隔符的索引或自定義CLR正則表達式函數。

還有使用交叉很好的解決的答案適用於另一個問題:How to split a comma-separated value to columns

+0

非常感謝,這工作和如果字符串的格式不固定呢? – Kenh426

+0

@ Kenh426如果它不是固定的,你應該看看我鏈接到的問題的答案。這有點複雜,但並不多。 – jpw