删除varchar中的逗号以获取数字并进行测试

时间:2014-05-25 10:38:43

标签: mysql sql phpmyadmin

我在mysql中遇到严重的varchar问题。 这是我的问题:

SELECT ak.`address`, ak.lien1_amount, ak.`comp`, ak.`zestimate`, ak.`counvalue`, IFNULL(COALESCE(ak.comp, ak.zestimate, ak.counvalue), 0) AS cmazestcv, CEIL( CAST(ak.lien1_amount AS DECIMAL(10,5)) ) AS testnum 
FROM allinformationk AS ak 
LEFT JOIN `home_buyers_alias1` ON ak.`house id` = `home_buyers_alias1`.`house id` 
WHERE ak.`is_deleted` = 'no' AND ( (CASE WHEN ak.`sale date 4` IS NOT NULL THEN ak.`sale date 4` WHEN ak.`sale date 3` IS NOT NULL THEN ak.`sale date 3` WHEN ak.`sale date 2` IS NOT NULL THEN ak.`sale date 2` ELSE ak.`sale date` END) IS NOT NULL) 
    AND ( CAST(IFNULL(COALESCE(ak.comp, ak.zestimate, ak.counvalue), 0) AS DECIMAL(10,5)) > CAST(ak.lien1_amount AS DECIMAL(10,5)) ) 
    AND ak.lien1_amount IS NOT NULL 
LIMIT 0, 10;

这是我的查询结果:enter image description here

字段lien1_amount,comp,zestimate,counvalue是VARCHAR。这就是我在查询中将它们转换为DECIMAL的原因。但仍然无法将其作为整数进行测试,当我想将其转换为十进制时,您可以看到lien1_amount在testnum列中给出了什么。 如何将那些具有昏迷的varchar改为金钱并进行测试? 我现在两天都做不到。

1 个答案:

答案 0 :(得分:1)

如果所述列的类型为varchar且始终保持数字值,则只需replace 逗号并使用结果。不需要明确的演员表。

并且,如果列compzestimatecounvalue也包含逗号,那么也应用replace

SELECT ak.`address`
     , CEIL( replace( ifnull( ak.lien1_amount, 0 ), ',', '' ) ) as lien1_amount
     , replace( ifnull( ak.`comp`, 0 ), ',', '' ) as `comp`
     , replace( ifnull( ak.`zestimate`, 0 ), ',', '' ) as `zestimate`
     , replace( ifnull( ak.`counvalue`, 0 ), ',', '' ) as `counvalue`
     , replace( ifnull( COALESCE( ak.comp, ak.zestimate, ak.counvalue )
               , 0 ), ',', '' ) AS cmazestcv
  FROM allinformationk AS ak 
  LEFT JOIN `home_buyers_alias1` 
         ON ak.`house id` = `home_buyers_alias1`.`house id` 
 WHERE ak.`is_deleted` = 'no' 
   AND ak.lien1_amount IS NOT NULL 
   AND COALESCE(   ak.`sale date 4`
                 , ak.`sale date 3`
                 , ak.`sale date 2`
                 , ak.`sale date`   ) IS NOT NULL 
   AND replace( 
         IFNULL( COALESCE( ak.comp, ak.zestimate, ak.counvalue ), 0 ), ',', '' ) 
       > replace( ak.lien1_amount, ',', '' )  
 LIMIT 0, 10;