Einzelnen Beitrag anzeigen

marabu

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

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

  Alt 20. Jul 2007, 21: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