postgres varchar需要转换

时间:2014-04-27 19:58:01

标签: sql postgresql casting

我在2个不同的模式中有2个表scha schb(例如)和scha我有几个表都是由varchar组成的,因为我必须格式化一些数据[它是任务的一部分]

现在我有相同的表格,但在schb中有不同的类型。

问题在于,无论我有哪种类型涉及数字(金钱,数字,日期),它都会给我一个CAST错误。

有没有办法我可以CAST,而不需要一个接一个地复制一个coloumn(一次性复制)

例如

INSERT INTO schb.customer
SELECT "col1", "col2" "col3 **(needs casting)**...."
FROM scha.customer

由于

1 个答案:

答案 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中包含了列列表。你不必这样做,但这是一个好主意,因为你不必担心列顺序,它可以很容易地跳过列(或让列假定它们的默认值明确告诉它们到)。