我有一个带有负数的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以查看是否删除了括号并且我得到零值。
答案 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文件加载到表格时特别有用。