database - 在 SQL 中以精美打印的格式选择数组

标签 database arrays parsing postgresql

我正在尝试选择一个二维整数数组,并将输出定向到一个文件。有什么方法可以编写一个 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/

相关文章:

c - 在 C 中推荐的 JSON 解析器?

c++ - 有没有办法让 QXmlStreamReader 处理格式错误的 XML?

mysql - 如何为 mySQL 表列中的所有数字+1

mysql - 将用户帐户和管理员帐户分开更安全吗?

mysql - 处于更新状态的kill删除语句是否会回滚整个数据?

arrays - 在 Powershell 中将 JSON 数组转换为单个 JSON 对象

mysql - col LIKE BINARY 'val%' 比 col LIKE 'val%' 慢得多。为什么?

java - map 接口(interface)java

java - 按特定字符串值对字符串数组进行排序

python - 如何解析以空格分隔的键值对的字符串?