Vielleicht mit BIGINT?
test=# select 12345678901::int;
ERROR: integer out of range
test=!# rollback;
ROLLBACK
Zeit: 0,189 ms
test=# select 1234567890123456789::bigint;
int8
---------------------
1234567890123456789
(1 Zeile)
Andreas
Vielleicht mit BIGINT?
test=# select 12345678901::int;
ERROR: integer out of range
test=!# rollback;
ROLLBACK
Zeit: 0,189 ms
test=# select 1234567890123456789::bigint;
int8
---------------------
1234567890123456789
(1 Zeile)
Andreas
seufz mit BIGINT. Oder doch einfach mal in die Dokumentation schauen, da sind alle Datentypen erklärt.
in den meisten Fällen funktioniert das mit log, nur warum wird z.B. aus
21.2 → 21
Weil 21.2 kein Integer ist.
Ev. möchtest du auch mit Floating Point oder Numeric Werten arbeiten.
21.2 hat doch schon drei signifikante Stellen…[/QUOTE]
Okay stimmt. Also mit ::float probiert. geht aber nicht weil:
ERROR: function trunc(double precision, integer) does not exist.
test=*# select trunc(1.2345::real, 2);
ERROR: function trunc(real, integer) does not exist
ZEILE 1: select trunc(1.2345::real, 2);
^
TIP: No function matches the given name and argument types. You might need to add explicit type casts.
test=!# rollback;
ROLLBACK
Zeit: 0,303 ms
test=# select trunc(1.2345::real::numeric, 2);
trunc
-------
1.23
(1 Zeile)
Andreas
hm, ::real::numeric hilft teilweise, teilweise wird aber immer nuch z.B 67,3334534 auf 67 gekürzt
Es ist leidlich schwer zu erraten, was Du tust.
Andreas
naja ich wende symbionts methode
trunc(x, (-log(x)+0.5)::int + 2)
an, um drei signifikante stellen zu erzwingen mit folgenden Ergebnissen für x
127.4173621283 --> 127
118.5 —> 118
115.6 --> 115
91.8506 --> 91
90.442 --> 90
40.448323 --> 40
29.77501 --> 29.7
22.843248 --> 22.8
14.6082323521 --14.6
13.46 --> 13.4
10.6 --> 10.6
Das kommt mit nicht ganz okay vor, vor allem nicht
91.8506 --> 91
90.442 --> 90
40.448323 --> 40
grüße
Irgendwie stehe ich auf dem Schlauch. Was ist denn an round() verkehrt?
Das macht doch genau das, was gewünscht ist.
Oder habe ich was übersehen?
postgres=> with dummy (x) as
postgres-> (
postgres(> values
postgres(> (127.4173621283),
postgres(> (118.5),
postgres(> (115.6),
postgres(> (91.8506),
postgres(> (90.442),
postgres(> (40.448323),
postgres(> (29.77501),
postgres(> (22.843248),
postgres(> (14.6082323521),
postgres(> (13.46),
postgres(> (10.6)
postgres(> )
postgres-> select round(x,3)
postgres-> from dummy;
round
---------
127.417
118.500
115.600
91.851
90.442
40.448
29.775
22.843
14.608
13.460
10.600
(11 rows)
es geht um drei signifikante Stellen, d.h. ein wert 698321409 wird zu 698000000, ein wert 0,7889 zu 0,789 oder 10,34 zu 10,4 etc. etc. bitte mal nachgooglen und den thread hier von Anfang an lesen.
Ich hatte den Thread gelesen, aber offensichtlich das Problem nicht verstanden
so nach langem ausprobieren lautet die für mich richtige lösung
round(((x)::numeric), ((2.5-(log(x)))::int))
die klammern machens wohl aus…
Danke an alle Beteiligten für die Hilfe!