AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstellen
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstellen

Ein Thema von juergen · begonnen am 19. Jul 2007 · letzter Beitrag vom 21. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

[SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstellen

  Alt 19. Jul 2007, 21:50
Datenbank: Pervasive SQL • Version: 9.x • Zugriff über: ODBC
Hallo zusammen,

hänge schon länger an einem Problem, wo ich einfach nicht weiterkomme...

Habe folgende SQL-Anweisung:
SQL-Code:
SELECT (RIGHT(KtoRechWerte.Datum, 2) + '.' + SUBSTRING(KtoRechWerte.Datum, 5, 2) + '.' + LEFT(KtoRechWerte.Datum, 4)) , LTRIM(Personalstamm.PersNr),
Round((KtoRechWerte.Wert/60),2) FROM...
Entscheidend ist die Round((KtoRechWerte.Wert/60),2)-Bedingung.
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 21:54
Versuchs mal mit einem Cast:
SQL-Code:
SELECT
   ..., cast(Round((KtoRechWerte.Wert/60),2) as numeric(15,2)) FROM...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 22:16
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...
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 22:29
Nimm mal 3 als 2. Parameter des Round
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 23:11
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:
...((KtoRechWerte.Wert/60), + '(DecimalSeparator)' + Mod((KtoRechWerte.Wert),60))... Wobei nun bei MOD auch ein Minuszeichen mit herauskommt...
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 23:16
Und wenn du innerhalb des Round castest?
Round((cast(KtoRechWerte.Wert as numeric(15,2))/60),2)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: [SQL] Ganzahl ändern in Dezimalzahl mit 2 Nachkommstelle

  Alt 19. Jul 2007, 23:24
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.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell

  Alt 19. Jul 2007, 23:53
In der DB (eventuell gehts nur so) :

SQL-Code:
DECLARE EXTERNAL FUNCTION DIV
    INTEGER,
    INTEGER
RETURNS DOUBLE PRECISION BY VALUE
ENTRY_POINT 'IB_UDF_div' MODULE_NAME 'IB_UDF'
Auf Client Seite dann so :

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;
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell

  Alt 20. Jul 2007, 07:37
@hansa: Ich glaube kaum das IB/FB-UDFs bei Pervasive SQL (Nachfolger von BTRIEVE) funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: [SQL] Ganzzahl ändern in Dezimalzahl mit 2 Nachkommstell

  Alt 20. Jul 2007, 09:11
Hi folks,

ich würde es so machen:

SQL-Code:
select cast(round(cast(k.wert as float) / 60, 2) as numeric(10, 2)) as wert
from ktorechwerte k, ....
Wichtig ist der innere Aufruf von CAST().

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz