这里有点问题。 我定期在MySQL表中自动更新货币。 生成的查询的一部分是:
UPDATE ara_curr SET
curr_xchange=REPLACE(CONVERT(CONVERT('1.60739',DECIMAL(9,5))/CONVERT('10000',DECIMAL(9,5)),DECIMAL(9,5)),'.',','),
curr_rev_xchange=REPLACE(CONVERT('6221.27',DECIMAL(9,5)),'.',',')
WHERE curr_name='IDR';
我从在线服务中获取值。但是,此查询返回
Out of range value for column (null) at row 1
但是,如果我将其分解,转换会返回
REPLACE(CONVERT('6221.27',DECIMAL(9,5)),'.',',') = 6221,27000
CONVERT('1.60739',DECIMAL(9,5)) = 1,60739
CONVERT('10000',DECIMAL(9,5)) = 9999,99999
CONVERT(CONVERT('1.60739',DECIMAL(9,5))/CONVERT('10000',DECIMAL(9,5)),DECIMAL(9,5)) = 0,00016
如果我尝试使用这些值直接运行查询,例如
UPDATE ara_curr SET curr_xchange='0,00016', curr_rev_xchange='6221,27000' WHERE curr_name='IDR';
它运行得很好!
有关于此的任何想法吗?
答案 0 :(得分:0)
curr_xchange和curr_rev_xchange是什么数据类型?
如果我运行您的查询,它会将结果作为二进制数据返回。 也许您可以围绕结果尝试使用CAST进行此修改。
UPDATE ara_curr SET
curr_xchange=CAST(REPLACE(CONVERT(CONVERT('1.60739',DECIMAL(9,5))/CONVERT('10000',DECIMAL(9,5)),DECIMAL(9,5)),'.',',') AS CHAR),
curr_rev_xchange=CAST(REPLACE(CONVERT('6221.27',DECIMAL(9,5)),'.',',') AS CHAR)
WHERE curr_name='IDR';
答案 1 :(得分:0)
尝试使用CAST而不是CONVERT:
UPDATE ara_curr
SET REPLACE(CAST(CAST('1.60739' AS DECIMAL(9, 5)) / CAST('10000' AS DECIMAL(9, 5)) AS DECIMAL(9, 5)), '.', ',') AS curr_xchange
, REPLACE(CAST('6221.27' AS DECIMAL(9, 5)), '.', ',') AS curr_rev_xchange
WHERE curr_name = 'IDR';
此外,如果10000
DECIMAL(9, 5)
超出允许范围,您可能会遇到一些问题。您可能希望将其转换为DECIMAL(10, 5)
。