2016-11-03 4 views
0

Ich benutze psql (9.1.3). Ich habe eine Tabelle (sagen wir) APostgres Abfrage nicht übereinstimmend negative doppelte Genauigkeit Werte

A hat zwei Spalten:

A_Id: Integer

customer_pay: double precision

Ich habe diese Werte in der Tabelle.

a_id  | customer_pay |  

-------------------- + -------------- +

1733684 |  -264.6 | 
    1723382 |  -314.84 | 
    1728106 |  50.55 | 
    1741636 |  -264.6 | (4 rows) 

aber wenn ich

tat

wählen a_id von A, wo customer_pay = -264,6;

Ich habe nichts.

Ich habe versucht alle möglichen Genauigkeitsvariationen wie -264.60, -264.00 usw. Diese Abfrage funktioniert genau für +264.6. Was soll ich tun, um Werte mit negativer doppelter Genauigkeit auszuwählen?

Danke für die Hilfe.

+0

Ich lief dies in Oracle, scheint gut. – sagi

+0

Ich habe versucht, "", "" usw. zu schreiben. Nichts funktioniert für mich in Postgres. – Amal

+0

Wenn Sie 'WHERE ROUND (customer_pay) = -264' verwenden. Funktioniert es ? – sagi

Antwort

0
select a_id 
from a 
where round(customer_pay::numeric, 2) = -264.6 

From the manual:

Berechnungen mit numerischen Werten genaue Ergebnisse, wenn möglich ergeben, z.B. Addition, Subtraktion, Multiplikation. Berechnungen mit numerischen Werten sind jedoch sehr langsam im Vergleich zu den Integer-Typen oder zu den Gleitkommatypen, die im nächsten Abschnitt beschrieben werden.

0

Der Datentyp DOUBLE PRECISION ist ein ungefährer, ungenauer Datentyp. Ich sehe keinen Grund, jemand würde es jemals anstelle eines genauen Typs wie DECIMAL verwenden.

Mit ungefähren Datentypen, egal welche Sprache, sollten Sie nie verwenden =. Wenn Sie einen ungenauen Datenwert vergleichen, berücksichtigen Sie immer ein Delta, z. where customer_pay between -264.6000001 and 264.5999999. Dies sollte allein erklären, warum ich sie nie benutzen würde ;-)

+0

Der Vorteil von "floating over numeric" ist, dass die Operationen schneller sind. –

+0

@Clodoaldo Neto: Sind sie? Kannst du überhaupt einen Unterschied messen, wenn du in PostgreSQL mit dem einen oder dem anderen arbeitest? Wenn es einen Unterschied gibt, sollte es vernachlässigbar sein. –

+0

Überprüfen Sie meine aktualisierte Antwort –

Verwandte Themen