如何将字符串转换为where语句中的数字

时间:2014-01-03 21:35:34

标签: 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;

我收到以下错误:

  

“第-1行错误代码1366:十进制值错误”..

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

1 个答案:

答案 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;