Sql postgres varchar需要铸造

Sql postgres varchar需要铸造,sql,postgresql,casting,Sql,Postgresql,Casting,我有两个不同模式的表scha schb(例如),在scha中有几个表都是由varchar组成的,因为我必须格式化一些数据[这是任务的一部分] 现在我有了相同的表,但在schb中有不同的类型 问题是,只要我有一个涉及数字(金钱、数字、日期)的类型,它就会给我一个错误 有没有一种方法可以让我不需要一个接一个地复制(一次复制全部内容)就可以进行转换 比如说 INSERT INTO schb.customer SELECT "col1", "col2" "col3 **(needs casting)**

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

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

问题是,只要我有一个涉及数字(金钱、数字、日期)的类型,它就会给我一个错误

有没有一种方法可以让我不需要一个接一个地复制(一次复制全部内容)就可以进行转换

比如说

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

A不是列列表,而是表达式列表(通常涉及列)。类型转换是一个表达式,因此您可以将其直接放入选择中。PostgreSQL支持:

第一种是标准SQL,
表单是特定于PostgreSQL的。如果您的
schb.customer.col3
是(例如)
数字(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中包含了列列表。您不必这样做,但这是一个好主意,因为您不必担心列的顺序,而且可以很容易地跳过列(或者让列采用默认值,并显式地告诉它们这样做)。

为什么不在SELECT子句中强制转换列?或者“我如何在选择中铸造价值观”是真正的问题吗?“如果你不介意的话,问题是如何的谢谢:)
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