SQL datum kleiner today
Hi,
habe eine kleine frage.
wie kann ich "datum < today and datum is not null" umsetzen?
Das war mein Ansatz es kommt aber immer ein Fehler.
habe eine kleine frage.
wie kann ich "datum < today and datum is not null" umsetzen?
datum DATE,
CONSTRAINT medium_datum CHECK(datum IS NOT NULL AND datum < sysdate)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 342222
Url: https://administrator.de/contentid/342222
Ausgedruckt am: 27.11.2024 um 02:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
Wenn es vom Typ 'Date' ist, könnte es unter MS SQL wie folgt aussehen
Dann denke ich, wird dein Problem sein, dass du eine Spalte als Date benannt hast. Benenne die mal z.B. in myDate um
Gruß
em-pie
- Welche DB hast du denn am Wickel?
- MS SQL
- MySQL
- Oracle
- PostgreSQL
- DB2
- SyBase
- Access,
- ...
- In welchem Format liegt dein Feld "datum" vor?
- willst du ein klassische SELECT oder UPDATE oder INSERT oder ALTER bzw. CREATE TABLE ausführen?
Wenn es vom Typ 'Date' ist, könnte es unter MS SQL wie folgt aussehen
Dann denke ich, wird dein Problem sein, dass du eine Spalte als Date benannt hast. Benenne die mal z.B. in myDate um
SELECT
datum AS myDate
...
FROM
...
WHERE
myDate IS NOT NULL
OR CONVERT (date, GETDATE()) > myDate
Gruß
em-pie
OK...
dann wäre vermutlich hier der erste Ansatz:
https://stackoverflow.com/questions/8424900/check-constraint-on-date-of- ...
Mit dem Check sieht es schon mal nicht falsch aus, auf den ersten Blick.
Hast du es mal mit einem TRIGGER versucht?
Welche Fehlermeldung erhältst du eigentlich bei deinem obigen Code?
€dit: Satz gestrichen (s.u.)
dann wäre vermutlich hier der erste Ansatz:
https://stackoverflow.com/questions/8424900/check-constraint-on-date-of- ...
Hast du es mal mit einem TRIGGER versucht?
Welche Fehlermeldung erhältst du eigentlich bei deinem obigen Code?
€dit: Satz gestrichen (s.u.)
Moin em-pie,
Na ja, allerdings ist nirgends ein Feld sollruckgabe vorhanden, Oracle kennt kein GetDate(), es müsste sysdate sein, welches aber nicht erlaubt ist als Wert in einer Check-Constraint und es müsste kleiner als statt grösser heissen. Aber sonst sieht es gut aus.
Also, geht so nicht.
Workaround:
Feld Datum auf Not nullable.
Vorher ein Feld createddate definieren Not null with default sysdate und darauf die Checkconstraint des Feldes Datum beziehen.
Grüße
Biber
Na ja, allerdings ist nirgends ein Feld sollruckgabe vorhanden, Oracle kennt kein GetDate(), es müsste sysdate sein, welches aber nicht erlaubt ist als Wert in einer Check-Constraint und es müsste kleiner als statt grösser heissen. Aber sonst sieht es gut aus.
Also, geht so nicht.
Workaround:
Feld Datum auf Not nullable.
Vorher ein Feld createddate definieren Not null with default sysdate und darauf die Checkconstraint des Feldes Datum beziehen.
Grüße
Biber
Moin StarMann,
Bevor du einen der letzten Kommentare für bare Münze nimmst oder gar meinen Workaround umsetzt, zur Klarstellung:
Du kannst in einer Check-Constraint nicht heute bzw. Sysdate verwenden, da der Wert nicht deterministisch ist. Ein fester Wert wie 12.08.2016 wäre erlaubt.
Du könntest in der Theorie den o.a. Workaround machen oder in einem Before-insert-Trigger das Datum prüfen und ggf. auf einen gültigen Wert setzen.
Würde aber kein Mensch so lösen. Jeder würde bei einem nicht erlaubten Wert eine Fehlermeldung zeigen wollen, damit der User diesen Wert berichtigt. Also eine programmatische Lösung mit Komfort und nicht nur Datensatz ablehnen und verwerfen.
Unabhängig davon kann das Feld Datum auf Not nullable gesetzt werden.
Grüße
Biber
Bevor du einen der letzten Kommentare für bare Münze nimmst oder gar meinen Workaround umsetzt, zur Klarstellung:
Du kannst in einer Check-Constraint nicht heute bzw. Sysdate verwenden, da der Wert nicht deterministisch ist. Ein fester Wert wie 12.08.2016 wäre erlaubt.
Du könntest in der Theorie den o.a. Workaround machen oder in einem Before-insert-Trigger das Datum prüfen und ggf. auf einen gültigen Wert setzen.
Würde aber kein Mensch so lösen. Jeder würde bei einem nicht erlaubten Wert eine Fehlermeldung zeigen wollen, damit der User diesen Wert berichtigt. Also eine programmatische Lösung mit Komfort und nicht nur Datensatz ablehnen und verwerfen.
Unabhängig davon kann das Feld Datum auf Not nullable gesetzt werden.
Grüße
Biber
Na ja, allerdings ist nirgends ein Feld sollruckgabe vorhanden, Oracle kennt kein GetDate(), es müsste sysdate sein, welches aber nicht erlaubt ist als Wert in einer Check-Constraint und es müsste kleiner als statt grösser heissen. Aber sonst sieht es gut aus.
Jepp, du hast recht... hatte den Satz erst geschrieben und wollte den nach dem Umschreiben eigentlich wieder rausgeschmissen haben.... habe wohl zu schnell auf Senden geklickt und nicht nochmal quer gelesen...
Egal.. Gut, dass du hier nochmal vorbei geschaut hast
Deine berechtigte Klarstellung (dass ein Sysdate in einem Check-Constraint nicht möglich ist) wird zudem ja noch vom obigen Link unterstrichen, denn auch in der Lösung wird dies explizit nochmal erwähnt.
Ansonsten, lieber TO, wie Biber schrieb, würde ich die Validierung der Daten ebenfalls zunächst in der GUI vorsehen. Also grundsätzlich versucht man ja immer das Problem dort abzufangen, wo es entsteht....