如何在mysql中将字符串转换为浮点数?

64

我有一个包含经纬度值的表格,它们以字符串(VARCHAR)形式存储,并且我想将它们转换为FLOAT (10,6)

然而,使用CAST()CONVERT()似乎没有直接的方法来实现这一点。

我该如何轻松地转换这些列? 这是一次性的转换。

3个回答

97
原来我只是在CAST()描述中漏掉了DECIMAL

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));

24
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
不要像我一样在 CAST() 之间加空格,否则会导致 错误代码:1064。您的SQL语法有误 - SBF

21

这将转换为数字值,无需进行强制转换或指定长度或位数:

STRING_COL+0.0

如果您的列是一个INT,可以省略.0以避免小数:

STRING_COL+0


转换为整数,而不是小数。 - Roger Dueck
@RogerDueck 你能提供一个产生INT类型的例子吗? - Justas
1
更正:在某些情况下转换为整数而不是小数。例如:CREATE TABLE t (j json); INSERT INTO t VALUES ('{"a":"1.23"}'); SELECT j->"$.a"+0 FROM t;,应该返回 1.23,但实际结果是 1 - Roger Dueck
4
尝试使用“+0.0”而不是“+0”。 - Justas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接