<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Dwie liczby po przecinku-typ danych]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1176</link>
		<description><![CDATA[Najświeższe odpowiedzi w Dwie liczby po przecinku-typ danych.]]></description>
		<lastBuildDate>Tue, 22 Nov 2011 11:30:32 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Dwie liczby po przecinku-typ danych]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3297#p3297</link>
			<description><![CDATA[[url=http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-NUMERIC-DECIMAL]numeric[/url] jest ok, ale rozumiem, że przy insercie chcesz odrzucać wartości typu 6.7777 jako nieprawidłowe ? Jeśli wystarczy samo zaokrąglanie np. tutaj do wartości 6.78, to typ numeric (czy jak wolisz synonim decimal) np. (11, 2) byłby OK (szczegółowe znaczenie tych dwóch liczb znajdziesz w podanym wyżej linku). W przeciwnym razie zostanie napisanie trigger'a (czy może wystarczy rewrite rule), który sprawdza wprowadzoną warość (sprawdź dostępne funkcje w dokumentacji) i zrobisz np. raise exception jeżeli ilość liczb po przecinku > 2, czy też robi auto-truncate np. do 6.77.

EDIT:

Chwilkę pogłówkowałem i w zasadzie można to zrobić prościej (bez triggera/rewrite rule) tzn. przez zwykły check constaint założony na TĘ kolumnę np:

[code]Create Table schowek (
    id serial Primary Key,
    value real Check (value::numeric = trunc(value::numeric, 2))
);[/code]

Dodawanie danych:

[code]INSERT INTO schowek (value) VALUES (25);
INSERT 0 1
INSERT INTO schowek (value) VALUES (25.00);
INSERT 0 1
INSERT INTO schowek (value) VALUES (25.37);
INSERT 0 1
INSERT INTO schowek (value) VALUES (25.376);
ERROR:  new row for relation "schowek" violates check constraint "schowek_value_check"
INSERT INTO schowek (value) VALUES (25.3700);
INSERT 0 1[/code]

Wyciąg z tabeli:

[code]Table schowek 
grzegorz-> ;
 id | value 
----+-------
  1 |    25
  2 |    25
  3 | 25.37
  5 | 25.37
(4 rows)[/code]

Powyższy sposób przepuszcza jednak wartości typu 25.3700 i.e. są one traktowane jakby nie posiadały końcowych zer (zawsze można podać inny warunek). Samo dodanie kolumny do tabeli wraz z ograniczeniem można oczywiście dodać via Alter.]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Tue, 22 Nov 2011 11:30:32 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3297#p3297</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Dwie liczby po przecinku-typ danych]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3296#p3296</link>
			<description><![CDATA[pole typu numeric

[url]http://www.linuxtopia.org/online_books/database_guides/Practical_PostgreSQL_database/PostgreSQL_x2632_004.htm[/url]]]></description>
			<author><![CDATA[dummy@example.com (adamleon)]]></author>
			<pubDate>Mon, 21 Nov 2011 22:00:24 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3296#p3296</guid>
		</item>
		<item>
			<title><![CDATA[Dwie liczby po przecinku-typ danych]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3295#p3295</link>
			<description><![CDATA[Mam napisać zapytanie dodające kolumnę. To nie jest problem problem w tym, że typ danych tej kolumny ma być rzeczywisty, czyli możemy wprowadzać liczby po przecinku ale warunek jest taki by nie można ich było wprowadzić więcej niż2 czyli np 7.2    4.55 można ale 6.7777 już nie tylko do dwóch liczb po przecinku. Jak to zrobić?]]></description>
			<author><![CDATA[dummy@example.com (gikones)]]></author>
			<pubDate>Mon, 21 Nov 2011 19:27:00 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3295#p3295</guid>
		</item>
	</channel>
</rss>
