我有一个包含存储为字符串(VARCHAR
)的纬度和经度值的表格,我想将其转换为FLOAT (10,6)
。
但是,似乎没有一种直接的方法可以使用CAST()
或CONVERT()
执行此操作。
如何轻松转换这些列?这是一次性转换。
答案 0 :(得分:67)
事实证明我在DECIMAL
说明中遗漏了CAST()
:
<强>
DECIMAL[(M[,D])]
强>将值转换为DECIMAL数据类型。可选参数M和D指定精度(M指定总位数)和小数值的刻度(D指定小数点后的位数)。默认精度是小数点后的两位数。
因此,以下查询有效:
UPDATE table SET
latitude = CAST(old_latitude AS DECIMAL(10,6)),
longitude = CAST(old_longitude AS DECIMAL(10,6));
答案 1 :(得分:12)
mysql> SELECT CAST(4 AS DECIMAL(4,3));
+-------------------------+
| CAST(4 AS DECIMAL(4,3)) |
+-------------------------+
| 4.000 |
+-------------------------+
1 row in set (0.00 sec)
mysql> SELECT CAST('4.5s' AS DECIMAL(4,3));
+------------------------------+
| CAST('4.5s' AS DECIMAL(4,3)) |
+------------------------------+
| 4.500 |
+------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CAST('a4.5s' AS DECIMAL(4,3));
+-------------------------------+
| CAST('a4.5s' AS DECIMAL(4,3)) |
+-------------------------------+
| 0.000 |
+-------------------------------+
1 row in set, 1 warning (0.00 sec)
答案 2 :(得分:4)
这将转换为数字值而无需强制转换或指定长度或数字:
STRING_COL+0