gpt4 book ai didi

ruby-on-rails - 如何将 postgres 列类型从字符串转换为 float

转载 作者:行者123 更新时间:2023-11-29 11:52:43 25 4
gpt4 key购买 nike

我有一个带有基本 postgres 数据库的 Rails 应用程序,但我意识到我的一些列是字符串,最好是 float 。我正在尝试将纬度和经度列从 varchar 转换为 float 。

我试过这篇文章 Rails - gmaps4rails gem on postgres但我不断收到此错误,错误: double 类型的输入语法无效:“”。我愿意尝试其他任何事情,并且我已经看到了使用 postgres 查询来实现它的方法的解决方案,但我不确定如何实现它们。这是一个简单的问题; “-73.88537758790638”我想变成-73.88537758790638。我似乎找不到可行的解决方案或我了解如何实现的解决方案。

最佳答案

空字符串由于显而易见的原因无法转换为数字。
你必须考虑到这一点。用 NULL0 或兼容的东西替换所有出现的地方。

对于您示例中的小数位数,您需要数据类型numeric,而不是 float - 既不是real (float4 ) 或 double (float8)。这些是有损类型,不够精确。见:

自己试试:

SELECT '-73.88537758790638'::real             AS _float4
,'-73.88537758790638'::double precision AS _float8
,'-73.88537758790638'::numeric AS _numeric;

结果(直到 Postgres 11):

_float4  | _float8           | _numeric
---------+-------------------+-------------------
-73.8854 | -73.8853775879064 | -73.88537758790638

db<> fiddle here

Postgres 12 中的显示得到改进(更多 extra_float_digits 默认情况下):

db<> fiddle here

Numeric types in the manual.

解决方案

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

ALTER TABLE tbl
ALTER COLUMN col1 TYPE numeric USING NULLIF(col1, '')::numeric;

关于ruby-on-rails - 如何将 postgres 列类型从字符串转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com