PostgreSQL: leeg DATE veld

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Koehoorn

Jan Koehoorn

07/08/2008 20:15:00
Quote Anchor link
Als je in MySQL een lege string in een DATE veld stopt krijg je geen klachten. PostgreSQL geeft dan een foutmelding. Op zich logisch, want een lege string is geen geldige datumwaarde.

Het komt echter wel voor dat je nog niet weet welke waarde een veld moet gaan bevatten en hem (voorlopig) leeg wilt laten. Na wat testen kwam ik erachter dat Postgre dit wel slikt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
INSERT INTO tabelnaam
(
    datumveld
)
VALUES
(
    null
)

Na wat Googlen kwam ik er achter dat dit weer problemen op kan gaan leveren met JOINS en aggregate functies. Het enige dat me op dit moment te binnen schiet is een foreign key maken naar een aparte tabel met datums. Heeft iemand hier ervaring mee?
 
PHP hulp

PHP hulp

22/01/2020 23:32:20
 
Han eev

Han eev

07/08/2008 21:32:00
Quote Anchor link
Zolang je niet op datums gaat joinen is er toch niet zo'n probleem?
Of zie ik dit verkeert?
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 21:38:00
Quote Anchor link
Ik kan me voorstellen dat je op datums gaat groeperen?
 
Klaasjan Boven

Klaasjan Boven

07/08/2008 22:07:00
Quote Anchor link
Jan ik snap het probleem niet. Bij mij werkt onderstaand prima. Uiteraard is de voorwaarde wel dat je het DATE veld niet de NOT NULL CONSTRAINT gegeven hebt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE "public"."blaat" (
  "Blaat" DATE,
  "Onzin" VARCHAR(100)
) WITH OIDS
TABLESPACE "pg_default";

INSERT INTO
  public.blaat(
  "Onzin")
 VALUES('tekst')

Query OK, 1 rows affected (171 ms)


Groeten
Klaasjan
 
Jan Koehoorn

Jan Koehoorn

07/08/2008 22:12:00
Quote Anchor link
Die not null constraint zit er bij mij uiteraard ook op. Maar in jouw voorbeeld laat je gewoon het datumveld weg uit de insert query. Ik vraag me af welke waarde er dan in de DATE kolom terecht komt.

Edit: die not null constraint zat er niet op, anders had ik die null ook niet kunnen invoeren natuurlijk. Kijken of dat nog iets uitmaakt.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Klaasjan Boven

Klaasjan Boven

07/08/2008 22:18:00
Quote Anchor link
Jan dan komt er null in de DB te staan en blijkbaar zijn we dan weer terug bij af....
 
Jan Koehoorn

Jan Koehoorn

08/08/2008 01:54:00
Quote Anchor link
Klopt. Blijft de vraag of dat problemen gaat opleveren met joins en aggregate functies.
 
Bo az

Bo az

08/08/2008 10:06:00
Quote Anchor link
Aan wat voor problemen zou je dan moeten denken? Ik kan het me haast niet voorstellen.

Bij joinen lijkt me echt alleen op het moment dat je gaat joinen op een datum kolom.
Bij aggregate functies is het zeer waarschijnlijk dat als je bijvoorbeeld een distinct count op een datum kolom uitvoert alle NULL waarden als 1 geteld worden.

Overigens vind ik het wel weer typisch dat je in MySQL een lege string als datum op kan geven.
 
Frank -

Frank -

13/08/2008 15:53:00
Quote Anchor link
NULL, het ontbreken van een waarde, is toch niets bijzonders? Dat dit niet kan in MySQL (met een datum), zegt meer over MySQL dan over deze mogelijkheid. Andere databases ondersteunen dit ook gewoon.

Wanneer jij wilt joinen op een datum, vind het bijzonder maar het kan, dan zit je met exact dezelfde regels als het joinen op een id die niet verplicht is. Wanneer je een NULL mag opslaan, dan is dat volgens de door jou opgestelde regels. Agregate functies hebben er geen problemen mee, die hebben daar dagelijks mee te maken, en voor joins geldt dit eveneens. Zie de verschillen tussen een INNER, LEFT, RIGHT en OUTER join.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.