如何将postgres列类型从string转换为float

Tsi*_*ege 2 postgresql activerecord ruby-on-rails database-normalization floating-point-conversion

我有一个带有基本postgres数据库的rails应用程序,但我意识到我的一些列是字符串,如果它们是浮点数最好.我正在尝试将纬度和经度的列从varchar转换为浮点.

在postgres上试过这个帖子Rails - gmaps4rails gem,但我一直收到这个错误,ERROR: invalid input syntax for type double precision: "".我愿意尝试其他任何东西,我已经看到了解决postgres查询的方法,但我不确定如何实现它们.这是一个直截了当的问题; "-73.88537758790638"我想成为-73.88537758790638.我似乎无法找到一个可行的解决方案或我理解如何实现的解决方案.

Erw*_*ter 11

由于显而易见的原因,空字符串无法转换为数字.
你必须考虑到这一点.用兼容NULL或替换所有出现的替换0.

同样,对于示例中的小数位数,您需要数据类型numeric,而不是float - 既不是real(float4)也不是double precision(float8).那些是有损类型,到目前为止还不够准确.试着看看:

SELECT '-73.88537758790638'::real             AS _float4
      ,'-73.88537758790638'::double precision AS _float8
      ,'-73.88537758790638'::numeric          AS _numeric;
Run Code Online (Sandbox Code Playgroud)

结果:

_float4  | _float8           | _numeric
---------+-------------------+-------------------
-73.8854 | -73.8853775879064 | -73.88537758790638
Run Code Online (Sandbox Code Playgroud)

手册中的数字类型.

单个SQL语句(用空字符串替换NULL):

ALTER TABLE tbl
ALTER COLUMN col1 TYPE numeric USING NULLIF(col1, '')::numeric;
Run Code Online (Sandbox Code Playgroud)