Seite 1 von 1

DATEDIFF, wenn ein Datum fehlt

Verfasst: Fr 16. Jan 2015, 18:17
von Freischreiber
Hallo,

ich versuche, eine Abfrage zu erstellen, die alle Rechnungen liefert mit Rechnungsdatum eine Woche zurückliegend oder älter:

Code: Alles auswählen

SELECT "Rechnungsnr", "AuftragID", "Betrag", "Datum", "Offen", DATEDIFF( 'dd', "t-rechnungen"."Datum", CURRENT_DATE ) AS "Tage" FROM "t-rechnungen" WHERE "t-rechnungen"."Offen" = TRUE AND DATEDIFF( 'dd', NULLIF ( "t-rechnungen"."Datum", '0' ), CURRENT_DATE ) >= 7 ORDER BY "Datum"
Das "NULLIF" ist der Versuch, auch dann Treffer (wenn auch mit unsinnigen Tage-Angaben) zu bekommen, wenn das Feld mit dem Rechnungsdatum leer ist, was bei allen alten Rechnungen der Fall ist (wurde vor Base nicht erfaßt).

Es kommt aber eine Fehlermeldung: data exception: invalid datetime format

Habe es auch mit '01.01.1800' statt '0' probiert, geht aber auch nicht...

Gruß
Freischreiber

Re: DATEDIFF, wenn ein Datum fehlt

Verfasst: Fr 16. Jan 2015, 18:27
von Freischreiber
Äh...

IFNULL statt NULLIF, er soll ja rechnen können, auch wenn das Datumsfeld NULL hat, nicht wahr :D

Code: Alles auswählen

 ... AND DATEDIFF( 'dd', IFNULL( "t-rechnungen"."Datum", '1980-01-01' ), CURRENT_DATE ) >= 7 ... 
Aber er liefert keine Tage in diesen Fällen... auch nicht zuviele, z. B. bis 1980 zurück, rechnen kann man damit nicht...

Freischreiber

Re: DATEDIFF, wenn ein Datum fehlt

Verfasst: Fr 16. Jan 2015, 19:24
von RobertG
Hallo freischreiber,

ich habe gerade einmal den zweiten Teil ausprobiert:

Code: Alles auswählen

DATEDIFF( 'dd', IFNULL( "Datum", '1980-01-01' ), CURRENT_DATE )
ergibt bei mir am 16.1.2015 12799. Hat also das gewünschte Ergebnis.
Da muss irgendetwas anderes faul sein.

Gruß

Robert

Re: DATEDIFF, wenn ein Datum fehlt

Verfasst: Sa 17. Jan 2015, 08:47
von Freischreiber
Hallo Robert,

( habe gerade überlegt, ob meine leeren Datumsfelder vielleicht gar nicht NULL sind, und das IFNULL daher gar nicht greift... vielleicht sind sie nur "leer". Aber wie sehe ich das?

Ich habe per SQL versucht, die leeren Strings auf Null zu setzen, das scheint aber so nicht zu gehen:

Code: Alles auswählen

UPDATE "t-rechnungen" SET "Datum" = NULL where "Datum" IS ''
)

Ergänzung: Es kommt dann die Fehlermeldung : 1: data exception: invalid datetime format


Ergänzung 2:
- Die leeren Felder sind NULL, werden in einer Abfrage, ob NULL, als Treffer geliefert. Das IFNULL müßte also greifen.
- Es ist eine externe HSQL-DB 2.3.2.

Gruß
Freischreiber