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)
| 归档时间: |
|
| 查看次数: |
9029 次 |
| 最近记录: |