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
 
marabu

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

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

  Alt 20. Jul 2007, 20:00
Hallo Jürgen,

mein Lösungsvorschlag ist kein Hexenwerk. Der SQL-Standard legt fest, dass arithmetische Operationen mit Integer-Werten einen Integer-Wert als Ergebnis haben. Da du auf die Nachkommastellen nicht verzichten willst, musst du einfach dafür sorgen, dass an der Division nicht nur Ganzzahlen beteiligt sind. Ich habe das aus didaktischen Gründen per CAST() gemacht. Alles andere dürfte deinen Versuchen recht ähnlich sehen.

Der Zusatz "as Wert" sorgt dafür, dass der im SELECT-Statement verwendete Ausdruck in der Ergebnismenge einen vernünftigen Namen trägt, über den du auch per FieldByName() zugreifen kannst.

In meinem Beispiel hatte ich einen Alias-Namen für die Tabelle vergeben. Diese Alias-Namen tragen sehr zur Lesbarkeit eines so umfangreichen Statement wie deinem bei:

SQL-Code:
SELECT (RIGHT(k.Datum, 2) + '.' + SUBSTRING(k.Datum, 5, 2) + '.' + LEFT(k.Datum, 4)),
  LTRIM(p.PersNr), CAST(ROUND(CAST(k.Wert AS FLOAT) / 60, 2) AS NUMERIC(10, 2)) AS Wert
FROM KtoRechWerte k, Personalstamm p
WHERE (k.PersId = p.Identifikation)
  AND ...
Außerdem fällt mir auf, dass du ein Datum als String im Format 'YYYY-MM-DD' speicherst. Günstiger wäre die Speicherung im von Pervasive SQL unterstützten Datentyp DATE. Du kannst das auch nachträglich noch ändern:

ALTER TABLE KtoREchWerte MODIFY COLUMN Datum DATE Das hätte den Vorteil, dass du das Format der Ausgabe mit SET DATEFORMAT = dmy einfach umstellen könntest, was dein Statement nochmal vereinfachen würde:

SQL-Code:
SELECT k.Datum, LTRIM(p.PersNr), CAST(ROUND(CAST(k.Wert AS FLOAT) / 60, 2) AS NUMERIC(10, 2)) AS Wert
FROM KtoRechWerte k, Personalstamm p
WHERE (k.PersId = p.Identifikation)
  AND ...
Wenn du das testen möchtest, dann sicher mit einer Kopie der Tabelle KtoRechWerte, die du leicht über Export und Import erstellen kannst.

Freundliche Grüße
  Mit Zitat antworten Zitat
 


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 18:53 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