我正在尝试将字符串转换为数字。我存储了诸如 $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/