【问题标题】:Convert a Negative Number with Parentheses to a Minus in MYSQL在MYSQL中将带括号的负数转换为减号
【发布时间】:2011-08-01 16:16:50
【问题描述】:

我有一个用括号括起来的负数的 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 以查看括号是否被删除并且我得到的值为零。

【问题讨论】:

  • 那是因为无论 Gross_d 是多少,ltrim('(') and rtrim(')') * -1 始终为零。

标签: mysql negative-number


【解决方案1】:

类似

convert (
    case 
       when gross_d LIKE '(%)' THEN CONCAT('-', REPLACE(REPLACE(gross_d, ')', ''), '(', ''))
       else gross_d
    end, decimal(19,6))

在这里,您只修剪括号。当您乘以 -1 时,它变为零

ltrim('(') and rtrim(')') *-1

【讨论】:

  • 我尝试使用代码,但在第 5 行 MYSQL 报告语法错误。我还在代码中添加了 select 和 from 。我尝试使用 cast 并得到同样的错误。
  • 我删除了转换语句并仅使用 select case 进行了尝试,并且负数被完美地表示。我将研究如何使用 convert 或 cast 语句,并将发布我的工作解决方案。
  • 感谢您的帮助。我必须首先从列中的每个值中删除所有逗号。我使用了 SET field_name = replace( replace(field_name, ',', ''), '"', '' )。然后我使用了转换程序。再次感谢!
  • @Lastever:不客气。请投票和/或接受我的回答(左上角和打勾)
【解决方案2】:
CONVERT( 
    IF( gross_d LIKE '(%)' 
        ,CONCAT( '-', SUBSTR( gross_d, 1, LENGTH( gross_d ) - 2 ) )
        ,gross_d )
,DECIMAL );

【讨论】:

    【解决方案3】:

    在我们公司,我们无法控制上传 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-20
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2015-10-09
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多