我有一個字符串,其座標如下:'0 0,1 2,3 4,0 0',我想將它分成兩列x和y。帶有兩個分隔符的SQL Server分割函數
結果我想收到:
我發現T-SQL一個解決方案,但遺憾的是SQL Server沒有分裂功能編碼,我也發現了一些功能來做到這一點,但僅適用於一種分隔符,我不能自己'升級',這是我從SQL開始的。
請幫助;)
我有一個字符串,其座標如下:'0 0,1 2,3 4,0 0',我想將它分成兩列x和y。帶有兩個分隔符的SQL Server分割函數
結果我想收到:
我發現T-SQL一個解決方案,但遺憾的是SQL Server沒有分裂功能編碼,我也發現了一些功能來做到這一點,但僅適用於一種分隔符,我不能自己'升級',這是我從SQL開始的。
請幫助;)
退房這個答案在這裏...你應該能夠調整它爲您的需求:
TSQL: Nested split/parse of string into table (multiple concatenated Tag:Value in one string)
要弄完,你需要首先將數據從,
分成行,然後所有的行分成兩列。
要將數據拆分成行,您可以使用例如Jeff Moden的DelimitedSplit8k函數。
一旦你有了行,你就可以用charindex定位空間,並使用left和substring函數來獲取這些部分。
這裏我使用遞歸CTE
;WITH tmp(id, DataItem, coord) as (
SELECT id,
LEFT(coord, CHARINDEX(', ', coord + ', ')-1),
STUFF(coord, 1, CHARINDEX(', ', coord + ', ')+1 , '')
FROM coordinates
UNION ALL
SELECT id,
LEFT(coord, CHARINDEX(', ', coord + ', ')-1),
STUFF(coord, 1, CHARINDEX(', ', coord +', ')+1, '')
FROM tmp
WHERE coord > ''
)
SELECT id,
DataItem,
coord,
SUBSTRING(DataItem, 1, CASE CHARINDEX(' ', DataItem) WHEN 0 THEN LEN(DataItem) ELSE CHARINDEX(' ', DataItem)-1 END) AS X,
SUBSTRING(DataItem, CASE CHARINDEX(' ', DataItem) WHEN 0 THEN LEN(DataItem)+1 ELSE CHARINDEX(' ', DataItem)+1 END, 1000) AS Y
FROM tmp
ORDER BY id
OUTPUT
| id | DataItem | coord | X | Y |
|----|----------|---------------|---|---|
| 1 | 0 0 | 1 2, 3 4, 0 0 | 0 | 0 |
| 1 | 1 2 | 3 4, 0 0 | 1 | 2 |
| 1 | 3 4 | 0 0 | 3 | 4 |
| 1 | 0 0 | | 0 | 0 |
這不在sql的範圍之內。它沒有這個功能,因爲你不應該需要一個...使用編程語言來實現它。 –
http://stackoverflow.com/questions/28772227/tsql-nested-split-parse-of-string-into-table-multiple-concatenated-tagvalue-i/28773089#28773089 – ashveli