我有一个坐标为:'0 0,1 1,2 4,0 0'的字符串,我想把它分成两列x和y。
结果我想收到:
我找到了T-SQL的解决方案,但不幸的是SQL Server没有编码的分割功能,我还发现了一些功能,但只针对一种分隔符,我不能自己'升级',这个是我的SQL开始。
请,帮助;)
答案 0 :(得分:0)
要完成这项工作,首先需要将数据拆分为,
的行,然后将所有行拆分为两列。
要将数据拆分为行,您可以使用例如Jeff Moden的DelimitedSplit8k函数。
获得行后,可以使用charindex定位空间,并使用left和substring函数获取部分。
答案 1 :(得分:0)
在这里查看这个答案......你应该能够根据自己的需要进行调整:
TSQL: Nested split/parse of string into table (multiple concatenated Tag:Value in one string)
答案 2 :(得分:0)
这里我使用递归CTE
<强> SqlFiddleDemo 强>
;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
输出
| 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 |