<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Sprawdzenie formatu danych przed zapisem do tabeli]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=1094&amp;type=atom"/>
	<updated>2012-03-14T21:50:48Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=1094</id>
		<entry>
			<title type="html"><![CDATA[Odp: Sprawdzenie formatu danych przed zapisem do tabeli]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3536#p3536"/>
			<content type="html"><![CDATA[jeśli ma być to tylko proste sprawdzenie pustego ciągu to proponuje wykonać to tak

- dla pustego ciągu 
insert into tabela (data) values ((case when length ('')=0 then null else '' end)::date); 
 - i dla ciągu nie pustego
insert into tabela (data) values ((case when length ('2012-01-01')=0 then null else '2012-01-01' end)::date);]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2012-03-14T21:50:48Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3536#p3536</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Sprawdzenie formatu danych przed zapisem do tabeli]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=3210#p3210"/>
			<content type="html"><![CDATA[W tabeli mam kolumnę typu 'date'. Dane to tabeli przesyłane są zewnętrznego programu. Podczas gdy użytkownik w programie wyczyści pole z datą program ten przesyła do bazy informację, że do pola data należy wpisać pusty łańcuch znaków (''). Baza z kolei odpowiada komunikatem, że '' nie jest poprawnym typem danych 'date'.
Jak można po stronie bazy najpierw sprawdzić, czy wartość pola jest ='', zamienić to na NULL, a dopiero potem zapisać w tabeli?
Próbowałem triggera i reguły, ale wygląda na to, że baza sprawdza poprawność formatu wcześniej, niż uruchomi triggera lub regułę.

Rozwiązałem problem tworząc tabelę pośrednią z kolumną data typu 'character varing', sprawdzam dane triggerem, ewentualnie zamieniam, a na końcu dopiero przepisuję do tabeli właściwej.

Może ktoś zna jednak prostsze i bardziej eleganckie rozwiązanie?]]></content>
			<author>
				<name><![CDATA[Rayo]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=1158</uri>
			</author>
			<updated>2011-11-09T21:11:07Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=3210#p3210</id>
		</entry>
</feed>
