Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Gerundete Spalten (https://www.delphipraxis.net/123097-gerundete-spalten.html)

Medium 27. Okt 2008 16:49

Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos

Gerundete Spalten
 
Ich versuche gerade ein paar als Double angelegte Spalten einer Tabelle zur Anzeige gerundet zu selektieren, jedoch haut mir MySQL das Statement immer um die Ohren, obwohl ich der Meinung bin alles nach der MySQL Referenz gebaut zu haben. Hier zunächst mal das Statement:
SQL-Code:
SELECT
  rp.Komp_Nr AS Komp_Nr,
  rp.Prio AS Prio,
  rp.Rohstoff AS Rohstoff,
  qt.Text AS Quelle,
  CONVERT(rp.Anteil_S, {X}REAL(15,2)) AS Anteil_S,
  CAST(rp.Anteil_I AS FLOAT(15,2)) AS Anteil_I,
  rp.Status AS Status,
  rp.Mischzeit AS Mischzeit,
  rp.ReaktZeit AS ReaktZeit,
  rp.Tank_Nr AS Tank_Nr,
  rp.Hand_Auto AS Hand_Auto
FROM
  rpoproz AS rp JOIN qtext AS qt
  ON
    rp.Tank_Nr = qt.Nummer
WHERE
  rp.Rez_Nr = :rn
ORDER BY
  Komp_Nr
Die interessanten Zeilen sind die mit "CAST" bzw. "CONVERT". Ich habe mittlerweile einige Kombinationen aus CAST/CONVERT mit den Typen Numeric, Float, Real und Decimal durch, aber jedes Mal haut es mich an der gekennzeichneten Stelle {X} mit einem SQL-Syntax Error raus. (Ich hab beide Varianten mit CAST und CONVERT nur zur Anschauung hier gemischt.)

Kann wer meinen vermutlich sehr dämlichen Fehler entdecken, oder aber kennt jemand einen hübscheren Weg auf N Stellen nach dem Komma gerundete Werte zu bekommen?

DeddyH 27. Okt 2008 17:03

Re: Gerundete Spalten
 
Versuch es mal mit einem cast auf decimal.
SQL-Code:
 SELECT cast( 3.1415927 AS decimal( 3, 2 ) ) //3 Stellen insgesamt, 2 nach den Komma

Medium 27. Okt 2008 17:11

Re: Gerundete Spalten
 
Diese Kombi hatte ich auch schon, leider ohne Erfolg. Auch ein Ändern der Genauigkeit von den üppigen 15 Stellen auf z.B. 3 hat leider nichts gebracht. Ich seh einfach ums Verrecken den Fehler nicht :(.

alzaimar 27. Okt 2008 17:44

Re: Gerundete Spalten
 
Kommentiere mal alle Spalten mit Ausnahme der beiden aus. Vielleicht liegt es z.B. am Feldnamen 'Text'.

Medium 27. Okt 2008 20:16

Re: Gerundete Spalten
 
Das mit dem 'Text' seh ich ja jetzt erst. Verdammte Schlüsselwörter, spucken einem doch immer mal wieder kräftig in die Suppe wenn man alte Paradox DBs nach SQL überführt :). Das klingt recht plausibel, und wenn ich mich morgen Nachmittag hier nicht noch mal verzweifelt einfinde war das die Lösung. Besten Dank!

Medium 28. Okt 2008 13:17

Re: Gerundete Spalten
 
Das war es leider doch nicht :(. Sowohl das Herausnehmen der Zeile mit 'Text', als auch das Einfassen der Bezeichner in Backticks hat keinerlei Änderung im beschriebenen Fehler bewirkt.

Ich werfe mal die Create Statements der beiden betroffenen Tabellen hier rein, und es wäre super wenn sich jemand fände obiges Select darüber auszuführen, und zu schauen ob der Fehler reproduzierbar ist. Ich bin etwas ratlos :gruebel:
SQL-Code:
CREATE TABLE `qtext` (
  `Nummer` int(11) NOT NULL default '0',
  `Text` varchar(40) default NULL,
  PRIMARY KEY (`Nummer`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `rpoproz` (
  `Komp_Nr` int(11) NOT NULL default '0',
  `Rez_Nr` int(11) NOT NULL default '0',
  `M_Nr` int(11) NOT NULL default '0',
  `Rohstoff` varchar(25) default NULL,
  `Tank_Nr` smallint(6) default NULL,
  `Anteil_S` float default NULL,
  `Anteil_I` float default NULL,
  `Ruehrw` int(11) default NULL,
  `Status` smallint(6) default NULL,
  `Dichte` float default NULL,
  `Hand_Auto` char(1) default NULL,
  `Prio` int(11) default NULL,
  `Mischzeit` int(11) default NULL,
  `ReaktZeit` int(11) default NULL,
  PRIMARY KEY (`Komp_Nr`,`Rez_Nr`,`M_Nr`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Neisklar 28. Okt 2008 14:17

Re: Gerundete Spalten
 
Warum nicht einfach:
SQL-Code:
ROUND(rp.Anteil_I,2) AS Anteil_I

Medium 28. Okt 2008 14:36

Re: Gerundete Spalten
 
Weil die "dürftige" (um es mal nett zu sagen) deutsche Hilfe zu MySQL nicht ein einziges Wort darüber verliert, dass man die Stellenanzahl angeben kann :? Das funktioklappt prächtig, besten Dank!
(Ich geb's zu, man hätte es einfach mal drauf ankommen lassen können und es probieren, aber ich war so perplex ob des o.g. Fehlers, darauf kam ich nicht mehr.)

Neisklar 28. Okt 2008 16:56

Re: Gerundete Spalten
 
Ohne drauf rumhacken zu wollen:
http://dev.mysql.com/doc/refman/5.1/...functions.html

steht alles drin :)

Medium 28. Okt 2008 17:58

Re: Gerundete Spalten
 
Das war sogar der 2. Link bei einer Googelei nach "mysql round" :oops:. Ich hatte nur den ersten betrachtet, da er das Thema explizit zu behandeln schien, und ich irgendwie noch immer Gedanklich bei cast bzw. convert war. Asche auf mein verwirrtes Haupt :)

Trotzdem würde mich noch immer interessieren, was in meinem Statement oben nun falsch sein soll, das Problem an sich ist aber erledigt.

Neisklar 29. Okt 2008 10:12

Re: Gerundete Spalten
 
Wenn ich die 5.1er Hilfe richtig lese kann selbst diese Version keinen Cast nach FLOAT oder REAL
(http://dev.mysql.com/doc/refman/5.1/...functions.html). Die 4.0.xer auf der ich getestet hatte kann auch kein DECIMAL.

DeddyH 29. Okt 2008 10:36

Re: Gerundete Spalten
 
Naja, die 4.0.x ist eh ein wenig hinter dem Mond, die kann auch keine Subqueries, wenn ich mich recht entsinne.

Medium 29. Okt 2008 11:08

Re: Gerundete Spalten
 
Ich hatte als aller erstes Decimal probiert, weil es in der Liste auch auftauchte. Dass das in der 4.1er einfach noch nicht ging -> :wall: Das erklärt natürlich einiges. Auch warum an anderer Stelle casten in Chars ganz wunderbar mit selber Syntax hingehauen hat. Das ist wohl der Preis, wenn man erst spät in die Datenbankwelt einsteigt. (Wir können leider nicht mal eben die SQL Serverversion ändern, der Kunde würd uns was husten - und die Entwickler der anderen SW die darüber läuft wohl auch fürchte ich.)

Und wieder ein stückchen schlauer dank :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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