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

JYe*_*ton 42 mysql type-conversion

我有一个包含存储为strings(VARCHAR)的纬度和经度值的表,我想将其转换为FLOAT (10,6).

但是,似乎没有一种直接的方法来使用CAST()或执行此操作CONVERT().

如何轻松转换这些列?这是一次性转换.

JYe*_*ton 68

事实证明我只是DECIMALCAST()描述中遗漏了:

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));
Run Code Online (Sandbox Code Playgroud)


zlo*_*ctb 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)
Run Code Online (Sandbox Code Playgroud)

  • 不要像我一样在"CAST"和"()"之间加一个空格.它将引导您"错误代码:1064.您的SQL语法错误." (2认同)

Jus*_*tas 9

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

STRING_COL+0

  • 尝试:“+0.0”而不是“+0” (3认同)