我在2个不同的模式中有2个表scha schb(例如)和scha我有几个表都是由varchar组成的,因为我必须格式化一些数据[它是任务的一部分]
现在我有相同的表格,但在schb中有不同的类型。
问题在于,无论我有哪种类型涉及数字(金钱,数字,日期),它都会给我一个CAST错误。
有没有办法我可以CAST,而不需要一个接一个地复制一个coloumn(一次性复制)
例如
INSERT INTO schb.customer
SELECT "col1", "col2" "col3 **(needs casting)**...."
FROM scha.customer
由于
答案 0 :(得分:1)
SELECT clause不是列的列表,它是表达式列表(通常涉及列)。类型转换是一个表达式,因此您可以将它们直接放入SELECT中。 PostgreSQL支持two casting syntaxes:
CAST ( expression AS type )
expression::type
第一个是标准SQL,::
形式是PostgreSQL特有的。如果您的schb.customer.col3
是(例如)numeric(5,2)
,那么您就说:
INSERT INTO schb.customer (col1, col2, col3)
SELECT col1, col2, cast(col3 as numeric(5,2))
FROM scha.customer
-- or
INSERT INTO schb.customer (col1, col2, col3)
SELECT col1, col2, col3::numeric(5,2)
FROM scha.customer
请注意,我也在INSERT中包含了列列表。你不必这样做,但这是一个好主意,因为你不必担心列顺序,它可以很容易地跳过列(或让列假定它们的默认值明确告诉它们到)。