Ich will eine Abfrage realisieren, in der ich Daten abrufe, die zwischen zwei verschiedenen Datumsangaben stehen.
Mit between löst man so etwas normalerweise, bei mir kommt aber noch zur abfrage dazu, das sie das Kriterium Ticket = Open auch erfüllen müssen.
Wenn ich jetzt aber die abfrage mache, kann ich meines wissens nur
SELECT * FROM Tickets WHERE datum BETWEEN ‘datum1’ AND ‘datum2’
anwenden. Daran noch ein AND Tickets = Open ranzuhängen scheint mir etwas komisch zu sein.
mit Quotes sind hier doppelte gemeint - weil PG grundsaetzlich case-sensitve arbeitet vererkennt er die spalte lastaction, LASTACTION oder LastAction als unterschiedlich.
Dazu kommt, dass PG alle symbole (tabellen, felder, etc) die nicht komplett klein geschrieben (definiert) sind in doppelten Quotes erwartet - scheiss Parser halt - alles in allem zeugt das von geringer disziplinierung der PG-Entwickler
also du musst “LastAction” verwenden … ‘LastAction’ ist ein String-Literal /-Konstante … die selbstverstaendlich nciht zwischen zwei datumsen liegen kann
Wenn Du schreibst "… where ‘A’ between ‘B’ and ‘C’, dann vergleichst Du den String ‘A’, ob dieser zwischen ‘B’ und ‘C’ liegt. Du willst aber den Inhalt der Spalte A mit ‘B’ und ‘C’ vergleichen. Also:
where "LastAction" between 'datum1'::date and 'datum2'::date and C
oder:
where LastAction between 'datum1'::date and 'datum2'::date and C
(falls Du noch eine Boolsche Spalte C hast, sowas schriebst Du ja.)
Ich habe gemerkt, das ich nicht nicht gerade in dem für meine Fragen vorgeshenden Forum bin, denn bei mir geht es gar nicht um PostgreSQL, auch wenn PgSQL flächendeckend die SQL grundbefehle kennt (hab ich mich mal erkundigt).
Ich Dachte pg-forum ist einfach nur ein name, den sich das forum einfallen lassen hast
Die zweite sache ist die Lösung:
SELECT *
FROM Tickets
WHERE (((LastAction) BETWEEN “08.01.2008” AND “16.09.2008”));
wenn ich es zum string konvertiere dann vergleich er die ersten beiden stellen vom datum… bringt mir aber nicht wirklich etwas.
test=*> create table proark (datum timestamptz, aktiv bool);
CREATE TABLE
test=*> insert into proark values(current_date, 't'::bool);
INSERT 0 1
test=*> insert into proark values(current_date+10, 't'::bool);
INSERT 0 1
test=*> insert into proark values(current_date+20, 'f'::bool);
INSERT 0 1
test=*> select * from proark where datum between '2008-09-01'::date and '2008-10-01'::date;
datum | aktiv
------------------------+-------
2008-09-29 00:00:00+02 | t
(1 row)
test=*> select * from proark where datum between '2008-09-01'::date and '2008-11-01'::date;
datum | aktiv
------------------------+-------
2008-09-29 00:00:00+02 | t
2008-10-09 00:00:00+02 | t
2008-10-19 00:00:00+02 | f
(3 rows)
test=*> select * from proark where datum between '2008-09-01'::date and '2008-11-01'::date and aktiv;
datum | aktiv
------------------------+-------
2008-09-29 00:00:00+02 | t
2008-10-09 00:00:00+02 | t
(2 rows)
(Arbeite mit VB.net auf ACCESS) ← is ja eig net so wichtig hauptsache SQL! ;D
Mein Beileid.
Hat jemand eine Lösung?
Vielleicht, aber mit Access bist Du ein ganzes Stück weit Offtopic hier.