我正在处理表单中的点数据(p1, p2)
,它在文本中表示为((x, y), (x, y))
。我想从这个字符串中得到 4 个值(x1
, x2
, y1
, y2
),但是我在使用数组索引时遇到了麻烦。
例如:
(1) 得到一个point[]
代表 2 个点的
select concat('{', replace(replace('(64,38),(-26,-40)', '(', '"('), ')', ')"'), '}')::point[];
-- This correctly gives me {(64.0,38.0),(-26.0,-40.0)}
(2) 从该数组中获取第一个点
select ( select concat('{', replace(replace('(64,38),(-26,-40)', '(', '"('), ')', ')"'), '}')::point[] )[1]
-- this gives me (64.0,38.0) (i.e. index = 1 gives me the FIRST point)
(3) 获取第一个点的x值
select ( select ( select concat('{', replace(replace('(64,38),(-26,-40)', '(', '"('), ')', ')"'), '}')::point[] )[1] )[0]
-- This gives me 64 (i.e. index = 0 gives me the FIRST point)
似乎在二维数组中,索引从 1 开始。但在一维数组中,索引从 0 开始。这怎么可能????
我已经对此进行了Dbeaver
单独测试,PG Admin 4
并且得到了相同的结果。
你没有二维数组,你有一个一维点数组。这不是一回事,即使它们确实有一些相似之处。我认为“点”是一种实现为固定长度数组类型的类型,如文档中所述
原因是该值
{(64.0,38.0),(-26.0,-40.0)}
实际上不是二维数组。这是一个点数组。一点,虽然它看起来像一个数组不是一个。访问点的元素时,索引从 0 开始。