如果我有一个类型为 varchar 的字段(所有值都是 null 或数字的字符串表示形式),如何使用 alter table 将此列类型转换为 bigint?
Possible Duplicate:
如何在 PostgreSQL 8.4 中将列数据类型从字符更改为数值型
Possible Duplicate:
如何在 PostgreSQL 8.4 中将列数据类型从字符更改为数值型
通过解析字符串(强制类型转换)进行转换:
alter table the_table alter column the_column type bigint using the_column::bigint
事实上,你可以使用任何与 the_column::bigint
有关的表达式来自定义转换,而不是 the_column :: bigint
。bigint
类型的列,然后执行以下SQL:UPDATE my_table SET bigint_column=varchar_column::bigint;
然后删除您的varchar_column并将bigint_column重命名。这有点绕,但不需要在postgres中使用自定义转换。
设计自己的自定义转换,从字符串到bigint。类似于以下内容:
CREATE OR REPLACE FUNCTION convert_to_bigint(v_input text)
RETURNS BIGINT AS $$
DECLARE v_bigint_value BIGINT DEFAULT NULL;
BEGIN
BEGIN
v_bigint_value := v_input::BIGINT;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Invalid bigint value: "%". Returning something else.', v_input;
RETURN 0;
END;
RETURN v_bigint_value;
END;
接下来创建一个新表fixed_table_with_bigint
,与旧表具有相同的参数,只是将字符串列更改为bigint列。
然后使用自定义转换convert_to_integer
将前一张表中的所有行插入到新表中:
insert into fixed_table_with_bigint
select mycolumn1,
convert_to_bigint(your_string_bigint_column),
mycolumn3
from incorrect_table