【问题标题】:convert string to decimal or float mysql将字符串转换为十进制或浮点 mysql
【发布时间】:2025-12-01 13:10:01
【问题描述】:

我有下一个问题, 我有一个带有字符串列的表,但我需要将此列转换为十进制或浮点数。 我尝试使用 cast 和 convert 但不起作用 例子

输入

3.50
7.10
18.50
27.00
46.50
46.90
117.90
226.70
274.70
Not available
Not available

试过

select cast(price as decimal(16,2)) from products

输出

0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00
0.00

我看到了这个警告

警告:#1918 转换为 DECIMAL 时遇到非法值 ''

警告:#1292 截断的 DECIMAL 值错误:

我需要稍后将此列与另一列相乘

【问题讨论】:

  • 加0即可;不需要强制转换或转换。如果您在数字上下文中使用字符串,即使添加 0 可能 也是不必要的。你还需要TRIM()吗?

标签: mysql casting decimal


【解决方案1】:

试试

select convert(price, decimal(16,2)) from products

【讨论】:

    【解决方案2】:

    如果您将简单的 0 添加到值中,您将获得浮点数或小数,您可以直接转换或使用 不是数字的所有内容都被转换为 0,但您可以将 Not available 替换为另一个数字

    CREATE TABLE textvalue
        (`Input` varchar(13))
    ;
        
    INSERT INTO textvalue
        (`Input`)
    VALUES
        ('3.50'),
        ('7.10'),
        ('18.50'),
        ('27.00'),
        ('46.50'),
        ('46.90'),
        ('117.90'),
        ('226.70'),
        ('274.70'),
        ('Not available'),
        ('Not available')
    ;
    
    SELECT CAST(Input + 0 AS DECIMAL(12,2))FROM textvalue
    
    | CAST(输入 + 0 作为十进制 (12,2)) | | -------------------------------------------: | | 3.50 | | 7.10 | | 18.50 | | 27.00 | | 46.50 | | 46.90 | | 117.90 | | 226.70 | | 274.70 | | 0.00 | | 0.00 |

    db小提琴here

    【讨论】: