【发布时间】:2014-07-03 01:53:09
【问题描述】:
我正在尝试一个简单的转换 - 一个 mysql varchar 列,其中包含经度值(例如“-1.234”到 -1.234)以增强优化。
我已经阅读并阅读了此内容,但没有任何效果,最后尝试的是:
UPDATE latlng_data SET lng_copy = CAST(lng AS DECIMAL(6,4));
会见:
错误代码:1366。十进制值不正确:'' for column '' at row -1
为从错误中恢复而创建的目标列是:
FLOAT(6,4)
and null allowed.
为什么mysql的错误信息这么没用。
遵循我使用过的“dognose”建议(如下):
UPDATE latlng_data SET lng='999.9999' where lng='';-- to give invalid lng in this case
然后增加复制数据字段(目的是将其重命名为 orig),然后:
UPDATE latlng_data SET lng_copy = CAST(lng AS DECIMAL(7,4));
这在 mysql cmd 中似乎是必需的,因为 Workbench 超时但使用:
show full processlist;
仍然显示它正在运行 - 所以这里最好的监视器是 cmd。
【问题讨论】:
-
CAST('-1.234' AS Decimal(6,4))在我这边工作得很好确保 lng_copy 中的所有值都有值并且可以干净地转换为 Decimal(6,4) 看起来其中一个是 '' -
正如@JasonSec 所说。请参阅:dev.mysql.com/doc/refman/5.6/en/cast-functions.html 可能的欺骗:stackoverflow.com/questions/18705119/…
-
UPDATE latlng_data SET lng_copy = lng * 1...隐藏 -
如果它无法转换,是否有添加后备 - 这是一个数百万行的数据库,所以如果我可以忽略和资源什么是坏数据,至少我可以在等待时继续开发。
-
感谢 dognose,这样做的结果值是多少
标签: mysql sql varchar sql-types