2016-04-08 18 views
0

クエリで正確にテーブルにレコードを1つ挿入する必要があります。たとえば、精度の高いオラクルで分割して挿入する

私はVARCHAR2としてpurchase_amount列を持っています。このクエリを実行すると、50.495というように挿入されます。しかし、私は精度の2つの場所を挿入する必要があります。期待される結果は50.49であるか、または50.50として切り上げる必要があります。これを達成する方法は?

答えて

2

OracleのSQLはround()機能が含まれています。最初のパラメータは値で、2番目のパラメータは丸めの度合いを制御します。小数点以下2桁に丸めるには:round((100.99/2),2)Find out more

は、の番号であるため、サンプルコードにto_number()コールがある理由がわかりません。また、数字の値を文字列として格納するのは本当に悪い考えです。それは生涯の不必要な痛みです。

1

まず、それはvarchar2としてpurchase_amountなどの数値を格納するのにも意味がありません。実際には、実際には数字として格納する必要があります。その場合、自動的に指定する精度は実際には決まります。

第二に、それは数値上to_numberを呼び出すしても意味がありません。 to_numberは文字列のみを受け入れます。したがって、数値を渡すと、Oracleは暗黙的に数値を文字列にキャストしなければなりません。to_numberは、文字列を数値に明示的にキャストして、開始した場所に戻ることができます。

あなたは値が50.5に丸めしたい場合は、roundを使用しています。値を50.49に切り捨てる場合は、truncを使用します。

insert into spend_amount(record_no, purchase_amount) 
    values(1, round(100.99/2, 2)); 

または

insert into spend_amount(record_no, purchase_amount) 
    values(1, trunc(100.99/2, 2)); 
関連する問題