在MYSQL中将带括号的负数转换为减号

时间:2011-08-01 16:16:51

标签: mysql negative-number

我有一个带有负数的MYSQL数据库,括在括号中 例如。 (14,500)应该是-14500。

我将数字存储为varchar。我试图将所有数字转换为double或float格式,并使用减号格式化负数。
我的代码:

select case 
   when substr(gross_d,1,1) = '(' then
       ltrim('(') and rtrim(')') *-1
   else 
      (gross_d)
   end gross_d_num
from buy;
convert(gross_d_num,Double);

我当前方法的问题是括号中的所有负数都被转换为零。是否有不同的方法来获得我的结果。

编辑:

我还删除了* -1以查看是否删除了括号并且我得到零值。

3 个答案:

答案 0 :(得分:3)

这样的东西
convert (
    case 
       when gross_d LIKE '(%)' THEN CONCAT('-', REPLACE(REPLACE(gross_d, ')', ''), '(', ''))
       else gross_d
    end, decimal(19,6))

在这里,您只是修剪括号。当你乘以-1

时,这变为零
ltrim('(') and rtrim(')') *-1

答案 1 :(得分:0)

CONVERT( 
    IF( gross_d LIKE '(%)' 
        ,CONCAT( '-', SUBSTR( gross_d, 1, LENGTH( gross_d ) - 2 ) )
        ,gross_d )
,DECIMAL );

答案 2 :(得分:0)

在我们公司,我们无法控制外部各方上传Excel工作表所使用的货币格式。我们目前使用它来转换货币,并在出现新的东西时添加一个案例:

SET @netSale := '$ (154.00)';

SELECT CONVERT (

CASE 
       when @netSale LIKE '$ (%)' THEN CONCAT('-', REPLACE(REPLACE(REPLACE(@netSale, '$ ', ''), ')', ''), '(', ''))
       when @netSale LIKE '(%)' THEN CONCAT('-', REPLACE(REPLACE(REPLACE(@netSale, '$ ', ''), ')', ''), '(', ''))
       else REPLACE(REPLACE(@netSale,'$',''),',', '')
    END, DECIMAL(10,2)
)

这涉及我们遇到的大多数格式样式,在将转换后的CSV文件加载到表格时特别有用。