我正在尝试将字符串转换为数字。我的值存储如$ 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;
我收到以下错误:
“第-1行错误代码1366:十进制值错误”..
错误意味着我正在尝试对where语句中的字符串执行操作。但我不确定为什么转换在这里失败了。如果转换工作,那么查询应该执行没有问题。
答案 0 :(得分:0)
我发现了问题和解决方案。问题是该表中有一个错误的数据导致查询失败。
为了解决这个问题,我添加了一个检查打印我做算术。检查将检查值是否为数字
这是我的新查询(我希望我的回答可以帮助其他人)
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;