我正在尝试将SELECT
语句与INSERT INTO
命令一起使用。如果没有小问题,一切都会正常工作:表格的某些字段定义为real[]
,但我的输入为numeric
。因此,问题是:
PostgreSQL中是否有一个函数可以在单个数字输入中创建一个real类型的数组(只有一个元素)?
我的设置如下:
tempLogTable(..., logValue NUMERIC, ...)
finalLogTable(..., logValues REAL[], ...)
我们的想法是使用tempLogTable
将元组从finalLogTable
插入到INSERT INTO ... SELECT ...
。不幸的是,由于各种原因,给出了数据类型,我暂时不想改变它们(不要破坏任何东西)。
我正在使用PostgreSQL 9.2。
答案 0 :(得分:3)
SELECT ARRAY[thenumeric::real] FROM the_table;
或
SELECT ARRAY[thenumeric]::real[] FROM the_table;
对于单元素阵列,它们并没有什么不同。
real
有numeric
没有的限制。特别是,比较real
值的相等性并不可靠;你应该比较两个不同的数字小于一个小的(有点任务特定的)数量。它也不能像数字那样表示大小的值。有关比较浮点数的其他信息,请参阅the floating point guide。当它们被包裹在数组中时,这将更难做到。
出于您描述的目的,听起来您只是收集统计数据或历史数据,这不会成为问题。它通常只是人们试图写的问题:
WHERE some_real = some_other_real
会导致令人惊讶和意外的行为。
如上所述,您应该使用INSERT INTO ... SELECT
。