Groups | Search | Server Info | Login | Register
Groups > de.comp.datenbanken.misc > #2566
| From | Tim Landscheidt <tim@tim-landscheidt.de> |
|---|---|
| Newsgroups | de.comp.datenbanken.misc |
| Subject | Re: Postgres: CASE in Abfrage |
| Date | 2024-06-06 17:22 +0000 |
| Organization | https://www.tim-landscheidt.de/ |
| Message-ID | <87tti63s1h.fsf@vagabond.tim-landscheidt.de> (permalink) |
| References | <v3spoi$20i8$1@rabbit.rsli.de> |
Volker Englisch <eh41@selene.inka.de> wrote: > Ich bin mit PostgreSQL eher hobbymäßig beschäftigt und habe eine > Datenbank für Arbeitszeiten und Termine. Die Tabelle für Termine sieht > in Kurzfassung so aus: > Spalte | Typ > ----------+--------------------------------+ > id | integer > person | character(1) > datum | date > von | time without time zone > text | character varying(80) > kz | numeric(1,0) > druckkz | numeric(1,0) > username | character(8) > zugriff | timestamp(0) without time zone > externkz | numeric(1,0) > listkz | numeric(1,0) > vortag | numeric(1,0) > Bisher wurden immer Termine ausgegeben, die am heutigen oder morgigen > Tag anstehen. Die Spalte "vortag" ist neu und soll steuern, ob ein > Termin tatsächlich schon am Vortag ausgegeben werden soll. Die > Ermittlung des (Vor-)tages fand so statt: > WHERE (datum::TEXT = TO_CHAR(now(), 'YYYY-MM-DD') > OR (datum - INTEGER '1')::TEXT = TO_CHAR(now(), 'YYYY-MM-DD')) > AND (kz = 0 OR kz= $kz) Für Vergleiche zwischen Kalenderdaten, die auch als DATE ge- speichert werden, empfiehlt es sich, auf das Umwandeln zu verzichten: | WHERE (datum = CURRENT_DATE | OR (datum - INTEGER '1') = CURRENT_DATE) | AND (kz = 0 OR kz= $kz) > Nun soll die mit OR beginnende Zeile so geändert werden, daß > sie nur beachtet wird, wenn das Feld "vortag" eine 1 enthält. Mein > Versuch: > CASE vortag = 1 > THEN OR (datum - INTEGER '1')::TEXT = TO_CHAR(... usw) > ELSE ')' > END > Das ')' wegen der sonst fehlenden schließenden Klammer. Postgres sagt: > Syntaxfehler bei CASE ... > Geht das überhaupt - in eine WHERE-Anweisung eine Bedingung einzubauen? > Dankeschön für einen kleinen "Tritt" in die richtige Richtung... Ja, nur muss diese Bedingung Teil der WHERE-Klausel sein. Beispiel, wenn ich Deine Logik richtig verstanden habe: | WHERE CASE WHEN vortag = 1 THEN datum = CURRENT_DATE - 1 | ELSE datum = CURRENT_DATE END | AND (kz = 0 OR kz= $kz) Das heißt, der Teil vor AND wird TRUE, falls entweder vortag 1 und datum gestern ist oder vortag nicht 1 und datum heute, sonst FALSE. Tim
Back to de.comp.datenbanken.misc | Previous | Next — Previous in thread | Next in thread | Find similar
Postgres: CASE in Abfrage Volker Englisch <eh41@selene.inka.de> - 2024-06-06 18:56 +0200
Re: Postgres: CASE in Abfrage Tim Landscheidt <tim@tim-landscheidt.de> - 2024-06-06 17:22 +0000
Re: Postgres: CASE in Abfrage Volker Englisch <eh41@selene.inka.de> - 2024-06-07 18:29 +0200
Re: Postgres: CASE in Abfrage Thomas Noll <-_tn_-@web.de> - 2024-06-06 17:39 +0000
Re: Postgres: CASE in Abfrage Volker Englisch <eh41@selene.inka.de> - 2024-06-07 18:31 +0200
Re: Postgres: CASE in Abfrage Thomas Noll <-_tn_-@web.de> - 2024-06-07 17:24 +0000
Re: Postgres: CASE in Abfrage Volker Englisch <eh41@selene.inka.de> - 2024-06-07 22:24 +0200
Re: Postgres: CASE in Abfrage "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2024-06-06 20:18 +0200
Re: Postgres: CASE in Abfrage Volker Englisch <eh41@selene.inka.de> - 2024-06-07 18:39 +0200
csiph-web