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