mysql - 如何在where语句中将字符串转换为数字

标签 mysql

我正在尝试将字符串转换为数字。我存储了诸如 $4,215.35 之类的值,因此我想将其转换为数字,以便我可以检查该值是否大于 50。

如果该值大于 50,那么我想用时间戳更新名为 first_sale_on 的字段。

这是我所做的

UPDATE 
    account AS m
    INNER JOIN ps_weekly_activations AS t ON t.mid = m.mid
SET 
    m.first_sale_on = CAST(CONCAT(STR_TO_DATE(t.Date_First_PL_Sale, '%c/%e/%Y'), ' 00:00:00') AS datetime)
WHERE 
    t.Date_First_PL_Sale IS NOT NULL
    AND CONVERT(REPLACE(REPLACE(Private_Label_Net_Sales, '$',''), ',', ''), DECIMAL(18,2) ) >= 50;

我收到以下错误:

"Error code 1366: Incorrect decimal value '' at row -1..

该错误意味着我正在尝试对 where 语句中的字符串进行操作。但我不确定为什么这里转换失败。如果转换有效,那么查询执行应该没有问题。

最佳答案

我找到了问题和解决方案。问题在于该表中存在错误数据,导致查询失败。

为了解决这个问题,我添加了一个检查打印,我做了算术。检查将检查该值是否为数字

这是我的新查询(我希望我的回答对其他人有帮助)

UPDATE 
    account AS m
    INNER JOIN ps_weekly_activations AS t ON t.mid = m.mid
SET 
    m.first_sale_on = CAST(CONCAT(STR_TO_DATE(t.Date_First_PL_Sale, '%c/%e/%Y'), ' 00:00:00') AS datetime)
WHERE 
    t.Date_First_PL_Sale IS NOT NULL

AND CONCAT('', REPLACE(REPLACE(Private_Label_Net_Sales, '$',''), ',', '') *1 ) = REPLACE(REPLACE(Private_Label_Net_Sales, '$',''), ',', '') 

    AND CONVERT(REPLACE(REPLACE(Private_Label_Net_Sales, '$',''), ',', ''), DECIMAL(18,2) ) >= 50;

关于mysql - 如何在where语句中将字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913102/

相关文章:

python - MySQL SELECT DISTINCT 不区分大小写吗?

mysql - 在mysql中的单行中显示数字和非数字列值的计数

php - 按结果分组为多维数组

mysql - "Unknown column"在 JOIN 中两次使用同一个表时出错

mysql - 带分页的范围随机顺序

php - 查询数据并显示在html表格中

python - 使用 MySQLdb 执行 INSERT 时如何保护文本

php - 从数据透视表(垂直 mysql 表)查看数据

mysql - MySQL SELECT 查询中的输出别名

MYSQL在不同的表中自动插入ID