我的曲线由 X/Y 点(数组?)组成,存储在具有相同分隔符的字符串中。每行有 1 条曲线。下面是一个简单的例子:
0,0,1,1,2,1.9,2.9,2.8,3.6,3.5
我想将每条曲线提取到 #table 中,以便我可以编辑它们并最终将它们放回去。
X,Y
0,0
1,1
2,1.9
2.9,2.8
3.6,3.5
一条曲线可能有十几个到数百个值,并且这些点可能没有顺序。
最干净/最简单的方法是什么?
我的曲线由 X/Y 点(数组?)组成,存储在具有相同分隔符的字符串中。每行有 1 条曲线。下面是一个简单的例子:
0,0,1,1,2,1.9,2.9,2.8,3.6,3.5
我想将每条曲线提取到 #table 中,以便我可以编辑它们并最终将它们放回去。
X,Y
0,0
1,1
2,1.9
2.9,2.8
3.6,3.5
一条曲线可能有十几个到数百个值,并且这些点可能没有顺序。
最干净/最简单的方法是什么?
我创建了一个表值函数(取自此处)来创建字符串的有序拆分。
然后我在下面的代码中使用了那个 TVF
代码使用 将您的字符串传入
SplitString
TVFCROSS APPLY
。我们使用 TWOCROSS APPLY
的。一个用于 X 列(别名 s1),一个用于 Y 列(别名 s2)。每个表(s1 和 s2)的行排序完全相同。我基本上是在使用您在问题中评论过的逻辑。
我们知道 X 序列值是奇数,Y 序列值是偶数。逻辑是确保 s2 索引(代表 Y 列)是 s1 行(代表 X 列)的 +1。
WHERE s2.[Index] = s1.[Index] + 1
我们想通过使用
modulus operator (%)
. 如果 s1.index / 2 = 1 的余数,我们有一个奇数行我们想通过使用
modulus operator (%)
. 如果 s1.index / 2 = 2 的余数,我们有一个偶数行它似乎适用于您的示例数据。
由于您运行的是 sql server 2016,您实际上可以使用新的string_split函数,这里是一个更简单的版本,在您的评论中使用您的真实数据
结果如下