我使用PostgreSQL 9.3编写代码:
ALTER TABLE meter_data ALTER COLUMN w3pht TYPE float USING (w3pht::float);
但不知道如何设置精度和比例。
答案 0 :(得分:4)
类型float
没有精度和比例。如果您需要,请使用numeric(precision, scale)
。
数据类型
real
和double precision
是不精确的,可变精度的数字类型。
对于您的例子:
ALTER TABLE meter_data ALTER COLUMN w3pht TYPE numeric(15,2)
USING w3pht::numeric(15,2) -- may or may not be required
手册:
如果没有从旧类型到新类型的隐式或赋值转换,则必须提供
USING
子句。
示例:如果旧数据类型为text
,则需要USING
子句。如果是float
,则不会。
答案 1 :(得分:1)
根据PostgreSQL documentation,您可以使用语法float(n)
选择浮点数的最小数量,其中n
是的最小数量二进制数字,最多53个。
但是,要存储十进制值,请使用numeric(precision, scale)
或其同义词decimal(precision, scale)
,但请注意这些是硬限制;根据文件:
如果要存储的值的比例大于声明的值 列的比例,系统会将值舍入到指定的值 小数位数。然后,如果左边的位数 小数点超过声明的精度减去声明的精度 比例,提出错误。
因此你的alter table可能是:
ALTER TABLE meter_data
ALTER COLUMN w3pht TYPE numeric(10, 2)
USING (w3pht::numeric(10, 2));
小数点右边的2位数和10位数。但是,如果你不这样做
需要指定限制,简单numeric
将允许“小数点前最多131072位;”后最多16383位。