2

我有一个用括号括起来的负数的 MYSQL 数据库,
例如。(14,500) 这应该是 -14500。

我将数字存储为 varchar。我正在尝试将所有数字转换为双精度或浮点格式,并使用减号格式化负数。
我的代码:

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 以查看括号是否被删除并且我得到的值为零。

4

3 回答 3

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
于 2011-08-01T16:21:23.930 回答
0
CONVERT( 
    IF( gross_d LIKE '(%)' 
        ,CONCAT( '-', SUBSTR( gross_d, 1, LENGTH( gross_d ) - 2 ) )
        ,gross_d )
,DECIMAL );
于 2011-08-01T16:41:16.380 回答
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 文件加载到表时特别有用。

于 2017-03-07T21:16:29.837 回答