MySQL查询中的奇怪回报

时间:2012-04-04 07:26:07

标签: mysql mysql-error-1264

这里有点问题。 我定期在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';

它运行得很好!

有关于此的任何想法吗?

2 个答案:

答案 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)