我正在尝试选择一个二维整数数组,并将输出定向到一个文件。有什么方法可以编写一个 postgresql 语句,使 select 语句的输出格式很好。正如在作为二维数组元素的每个整数数组中一样,它在其自己的行中。
现在我只得到这个输出:
SELECT array FROM table LIMIT 1;
{{0,0,0},{1,1,1},{2,2,2},{3,3,3},{0,0,0},{1,1,1},{2,2,2},{3,3,3}
,{0,0,0},{1,1,1},{2,2,2},{3,3,3},{0,0,0},{1,1,1},{2,2,2},{3,3,3}
,{0,0,0},{1,1,1},{2,2,2},{3,3,3},{0,0,0},{1,1,1},{2,2,2},{3,3,3}}
我想得到更多这样的东西:
{0,0,0}
{1,1,1}
{2,2,2}
...
我可以在查询返回并进行一些解析后执行此操作,但如果可以在 Postgres 本身中执行,那将是理想的。
最佳答案
有几种方法。一种方法是将数组转换为文本并将其拆分为 regexp_split_to_table() .
此函数存在于 PostgreSQL 8.3 或更高版本 中。
SELECT regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{');
输出:
0,0,0
1,1,1
2,2,2
如果你想要封闭的括号(也许你不需要?),像这样把它们加回去:
SELECT '{' || regexp_split_to_table(trim(my_2d_intarr::text, '{}'), '},{') || '}';
输出:
{0,0,0}
{1,1,1}
{2,2,2}
替代方案:
这应该也适用于 PostgreSQL 8.2 或什至更早的版本,但我没有测试过。
SELECT my_2d_int_arr_var[x:x][1:3]
FROM (SELECT generate_series(1, array_upper(my_2d_intarr, 1), 1)::int4 AS x)) x
输出:
{{0,0,0}}
{{1,1,1}}
{{2,2,2}}
(你可能想去掉一些大括号..)
否则,我会编写一个遍历数组的 plpgsql 函数。相当容易。
还有相关的unnest()
函数,但它为每个基本元素(在本例中为整数)返回一行,因此在这里没有用。
一种(快速!)输出结果的方式:COPY
.
关于database - 在 SQL 中以精美打印的格式选择数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604169/