![]() |
Datenbank: Pervasive SQL • Version: 9.x • Zugriff über: ODBC
[SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstellen
Hallo zusammen,
hänge schon länger an einem Problem, wo ich einfach nicht weiterkomme... Habe folgende SQL-Anweisung:
SQL-Code:
Entscheidend ist die Round((KtoRechWerte.Wert/60),2)-Bedingung.
SELECT (RIGHT(KtoRechWerte.Datum, 2) + '.' + SUBSTRING(KtoRechWerte.Datum, 5, 2) + '.' + LEFT(KtoRechWerte.Datum, 4)) , LTRIM(Personalstamm.PersNr),
Round((KtoRechWerte.Wert/60),2) FROM... Im Round() kommt -je nach Ergebnis- entweder eine Ganzzahl (z.B. -8) raus, oder eben eine Decimalzahl mit 2 Nachkommastellen. Das Round() benötige ich unbedingt...Dieses DB-Feld ist ein Integertyp. Jetzt habe ich einiges probiert mit Format, Decimal... Bekomme aber immer eine Meldung, dass die SQL-Anweisung ungültig ist. Hat hierzu jemand eine Idee? Schon mal Danke vorab! |
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
Versuchs mal mit einem Cast:
SQL-Code:
SELECT
..., cast(Round((KtoRechWerte.Wert/60),2) as numeric(15,2)) FROM... |
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
Hallo mkinzler,
danke für den Tip! Habe mir nun das Cast in Kombination mit as numeric angelesen, laut Beschreibung müsste das so passen... Aber das Ergebnis ändert sich leider nicht. (es kommt auch kein SQL-Fehler) Ich habe immer noch die Zahlen mit keiner oder nur einer Nachkommastelle... :cry: |
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
Nimm mal 3 als 2. Parameter des Round
|
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
So sieht es aus mit "2" als 2. Parameter für Round():
19.07.2007;10;0 19.07.2007;10;3,5 19.07.2007;10;-20,5 19.07.2007;10;-100,5 19.07.2007;10;-592,88 19.07.2007;11;0 19.07.2007;11;-8 19.07.2007;11;-32 19.07.2007;11;-112 19.07.2007;11;-581,85 19.07.2007;96387;0 19.07.2007;96387;-8 19.07.2007;96387;-32 19.07.2007;96387;-112 19.07.2007;96387;-608 und so mit einer auf 3 Stellen zu rundenden Zahl: 19.07.2007;10;0 19.07.2007;10;3,5 19.07.2007;10;-20,5 19.07.2007;10;-100,5 19.07.2007;10;-592,883 19.07.2007;11;0 19.07.2007;11;-8 19.07.2007;11;-32 19.07.2007;11;-112 19.07.2007;11;-581,85 19.07.2007;96387;0 19.07.2007;96387;-8 19.07.2007;96387;-32 19.07.2007;96387;-112 19.07.2007;96387;-608 Ohne Verwendung von Round() sieht es so aus: 19.07.2007;10;3 19.07.2007;10;-20 19.07.2007;10;-100 19.07.2007;10;-592 19.07.2007;11;0 19.07.2007;11;-8 19.07.2007;11;-32 19.07.2007;11;-112 19.07.2007;11;-581 19.07.2007;96387;0 19.07.2007;96387;-8 19.07.2007;96387;-32 19.07.2007;96387;-112 19.07.2007;96387;-608 Es wird also alles als Ganzzahl erstellt, anscheinend wegen dem Tabellen-Feld-Typ "Integer"? Wenn ich den 2.Parameter von Nummeric veränder, ändert sich nichts... Ich müsste jetzt "nur" eine Verkettung hinbekommen nach dem Motto:
SQL-Code:
Wobei nun bei MOD auch ein Minuszeichen mit herauskommt...
...((KtoRechWerte.Wert/60), + '(DecimalSeparator)' + Mod((KtoRechWerte.Wert),60))...
|
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
Und wenn du innerhalb des Round castest?
SQL-Code:
Round((cast(KtoRechWerte.Wert as numeric(15,2))/60),2)
|
Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle
also das geht leider auch nicht.
Gerundet wird aber richtig. Das heisst der Rückgabewert wird auch von Round als Zahl erkannt. Nur warum funktioniert dann das Casten nicht? Es kommt kein Fehler, zeigt aber auch keinerlei Wirkung, man könnte es genauso gut weg lassen und hätte dasselbe Ergebnis. :gruebel: |
Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell
In der DB (eventuell gehts nur so) :
SQL-Code:
Auf Client Seite dann so :
DECLARE EXTERNAL FUNCTION DIV
INTEGER, INTEGER RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_div' MODULE_NAME 'IB_UDF'
Delphi-Quellcode:
function LeseRealFeld (d : TpFIBDataSet;FeldName : string) : real;
begin if StrVorhanden (FeldName) then LeseRealFeld := d.FieldByName(FeldName).AsCurrency else LeseRealFeld := 0; // eventuell NULL end; |
Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell
@hansa: Ich glaube kaum das IB/FB-UDFs bei Pervasive SQL (Nachfolger von BTRIEVE) funktionieren.
|
Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell
Hi folks,
ich würde es so machen:
SQL-Code:
Wichtig ist der innere Aufruf von CAST().
select cast(round(cast(k.wert as float) / 60, 2) as numeric(10, 2)) as wert
from ktorechwerte k, .... Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz