Seite 1 von 1
SQL und numerische felder mit Nachkommazahlen
Verfasst: Fr, 22. Apr 2011 21:19
von Manfred
Hi,
wie muß man eigentlich bei SQL Spaltendefinitionen die Spaltenbreite angeben, bei Nachkommastellen? Bei DBF ist es ja 7,2 = 7 Stellen gesamt, 2 davon Nachkomma, 1 für das Komma. Das was ich gerade gegoogelt habe, verwirrt mich ein wenig. Dort steht nämlich, 7,2 würde bedeuten links und rechts vom Komma nur 2 Zahlen. Oder interpretiere ich das falsch?
Re: SQL und numerische felder mit Nachkommazahlen
Verfasst: Fr, 22. Apr 2011 21:31
von Martin Altmann
So wie Du das dort gelesen hast, glaube ich das nicht wirklich.
Viele Grüße,
Martin
Re: SQL und numerische felder mit Nachkommazahlen
Verfasst: Fr, 22. Apr 2011 21:34
von Manfred
also verhält es sich so, wie bei DBF!?
Re: SQL und numerische felder mit Nachkommazahlen
Verfasst: Fr, 22. Apr 2011 21:50
von Martin Altmann
Ähnlich. Yup. Das Komma wird nicht mitgezählt. 6,2 heißt 4 vor und 2 nach dem Komma.
Viele Grüße,
Martin
Re: SQL und numerische felder mit Nachkommazahlen
Verfasst: Sa, 23. Apr 2011 5:46
von georg
Hallo,
im Zweifel, ausprobieren:
Code: Alles auswählen
mysql> create table dezimal (feld1 decimal (4,2));
Query OK, 0 rows affected (0.12 sec)
mysql> insert into dezimal (feld1) values (3333.33);
ERROR 1264 (22003): Out of range value for column 'feld1' at row 1
mysql> insert into dezimal (feld1) values (333.33);
ERROR 1264 (22003): Out of range value for column 'feld1' at row 1
mysql> insert into dezimal (feld1) values (33.33);
Query OK, 1 row affected (0.05 sec)
Also, (Gesamtlänge, Dezimalstellen). Zumindest bei MySQL. Es mag aber auch sein, dass bei anderen Systemen - in Abhängigkeit von der Implementierung der Speicherung) - grössere Werte zulässig sind. Bei der AS/400 (DB/2 400) werden numerische Werte standardmässig gepackt abgelegt, und gepackte Felder haben immer eine ungerade Stellenanzahl ...
Aber für den Standard sollte das gelten.
Vorsicht, denn das geht auch ...
Code: Alles auswählen
mysql> insert into dezimal (feld1) values (33.333);
Query OK, 1 row affected, 1 warning (0.02 sec)
mysql> select * from dezimal;
+-------+
| feld1 |
+-------+
| 33.33 |
| 33.33 |
+-------+
2 rows in set (0.00 sec)
Gruss,
Georg