1

这里有个小问题。我会定期自动更新 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';

它运行完美!

有什么想法吗?

4

2 回答 2

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为 a时遇到一些麻烦,DECIMAL(9, 5)因为它超出了允许的范围。您可能希望将其转换为DECIMAL(10, 5)

于 2012-10-27T23:07:51.800 回答
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';
于 2012-04-04T07:41:04.990 回答