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';

それは完全にOKです!

これについてのアイデアはありますか?

4

2 に答える 2

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 に答える
0

CONVERT の代わりに CAST を使用してみてください。

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)

于 2012-10-27T23:07:51.800 に答える