4

我正在尝试将SELECT语句与INSERT INTO命令一起使用。如果不是小问题,一切都会正常工作:表的某些字段定义为real[]但我的输入是numeric. 因此,问题:

PostgreSQL 中是否有一个函数可以从单个数字输入中创建一个实数类型的数组(只有一个元素)?

我的设置如下所示:

tempLogTable(..., logValue NUMERIC, ...)
finalLogTable(..., logValues REAL[], ...)

这个想法是将元组从 the 插入tempLogTablefinalLogTableusing INSERT INTO ... SELECT ...。不幸的是,由于各种原因,给出了数据类型,我暂时不想更改这些(不要破坏任何东西)。

我正在使用 PostgreSQL 9.2。

4

1 回答 1

3
SELECT ARRAY[thenumeric::real] FROM the_table;

或者

SELECT ARRAY[thenumeric]::real[] FROM the_table;

对于单元素数组,它们并没有什么不同。

realnumeric没有的限制。特别是,比较real相等的值并不可靠。相反,您应该比较两个数字的差异小于一个小的(有点特定于任务)数量。它也不能像数字那样表示大或小的值。有关比较浮点数的其他信息,请参阅浮点指南。当它们被包裹在数组中时,这将更难做到。

出于您描述的目的,听起来您只是在收集统计数据或历史数据,这不会成为问题。这通常只是人们尝试编写的问题:

WHERE some_real = some_other_real

这将导致令人惊讶和意想不到的行为。

如上所述,您应该没问题INSERT INTO ... SELECT

于 2013-05-31T16:10:32.300 回答