SQL Server拆分函数有两个分隔符

时间:2015-10-28 15:36:20

标签: sql sql-server split

我有一个坐标为:'0 0,1 1,2 4,0 0'的字符串,我想把它分成两列x和y。

结果我想收到:

enter image description here

我找到了T-SQL的解决方案,但不幸的是SQL Server没有编码的分割功能,我还发现了一些功能,但只针对一种分隔符,我不能自己'升级',这个是我的SQL开始。

请,帮助;)

3 个答案:

答案 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 |