我有一个包含经纬度值的表格,它们以字符串(VARCHAR
)形式存储,并且我想将它们转换为FLOAT (10,6)
。
然而,使用CAST()
或CONVERT()
似乎没有直接的方法来实现这一点。
我该如何轻松地转换这些列? 这是一次性的转换。
我有一个包含经纬度值的表格,它们以字符串(VARCHAR
)形式存储,并且我想将它们转换为FLOAT (10,6)
。
然而,使用CAST()
或CONVERT()
似乎没有直接的方法来实现这一点。
我该如何轻松地转换这些列? 这是一次性的转换。
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));
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)
这将转换为数字值,无需进行强制转换或指定长度或位数:
STRING_COL+0.0
如果您的列是一个INT
,可以省略.0
以避免小数:
STRING_COL+0
CREATE TABLE t (j json); INSERT INTO t VALUES ('{"a":"1.23"}'); SELECT j->"$.a"+0 FROM t;
,应该返回 1.23
,但实际结果是 1
。 - Roger Dueck
CAST
和()
之间加空格,否则会导致错误代码:1064。您的SQL语法有误
。 - SBF