2016-04-08 5 views
0

Ich brauche einen Datensatz in der Tabelle mit Genauigkeit in Abfrage einfügen. Zum Beispiel:teilen und einfügen mit Präzision Orakel

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

Ich habe eine purchase_amount Spalte als VARCHAR2. Damit wird beim Ausführen dieser Abfrage als 50.495 eingefügt. Aber ich muss nur zwei Stellen der Genauigkeit einfügen. Das erwartete Ergebnis sollte 50.49 lauten oder als 50.50 aufgerundet werden. Wie erreiche ich das?

Antwort

2

Oracle SQL enthält eine round()-Funktion. Der erste Parameter ist der Wert, der zweite Parameter steuert den Grad der Rundung. Also um auf zwei Dezimalstellen zu runden: round((100.99/2),2). Find out more.

Nicht sicher, warum Sie einen to_number() Aufruf in Ihrem Beispielcode haben, als was Sie bereits haben ist eine Nummer. Außerdem ist es eine sehr schlechte Idee, numerische Werte als Zeichenfolgen zu speichern: es ist eine lebenslange nutzlose Pein.

1

Erstens macht es keinen Sinn, einen numerischen Wert wie purchase_amount als varchar2 zu speichern. Es sollte wirklich, wirklich, wirklich als eine Nummer gespeichert werden, in welchem ​​Fall es tatsächlich die von Ihnen angegebene Genauigkeit automatisch haben wird.

Zweitens macht es keinen Sinn, to_number auf einen numerischen Wert aufzurufen. to_number akzeptiert nur eine Zeichenfolge. Wenn Sie also einen numerischen Wert übergeben, muss Oracle die Zahl implizit in eine Zeichenfolge umwandeln, und to_number setzt die Zeichenfolge explizit auf eine Zahl zurück, um Sie direkt zu Ihrer ursprünglichen Position zu bringen. Wenn Sie möchten, dass der Wert auf 50,5 gerundet wird, verwenden Sie round. Wenn Sie möchten, dass der Wert auf 50.49 gekürzt wird, verwenden Sie trunc.

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

oder

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