Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Logik ohne Klammersetzung abbilden (https://www.delphipraxis.net/150388-sql-logik-ohne-klammersetzung-abbilden.html)

HolgerCW 15. Apr 2010 10:05

Datenbank: ORACLE • Version: 10 • Zugriff über: BDE

SQL Logik ohne Klammersetzung abbilden
 
Hallo zusammen,

ich habe einen Filter gebastelt wo der Anwender selber Tabellen filtern kann.
Er kann die einzelnen Spalten mit AND oder OR verknüpfen nur nicht mit Klammern.
Er kann die Werte der Spalten mit >=, =, <>, like, not like, <= abfragen.

Wie kann man nun folgenden SQL-String ohne Klammern abbilden:

Delphi-Quellcode:
(Uhrzeit >= 21:30 AND Uhrzeit <= 23:59) OR (Uhrzeit >= 00:00 AND Uhrzeit <= 06:00)
Gruss

Holger

mkinzler 15. Apr 2010 10:12

Re: SQL Logik ohne Klammersetzung abbilden
 
Gar nicht, da ja die Ergebnisse von logischen Operationen in einen weiteren Vergleich einfliessen

HolgerCW 15. Apr 2010 10:23

Re: SQL Logik ohne Klammersetzung abbilden
 
Schade. Ich hatte nämlich bisher einfach bei ODER-Verknüpfungen am Anfang und am Ende automatisch eine Klammer gesetzt. Bei dieser Filter-Anfrage klappt dies aber leider so nicht.

DeddyH 15. Apr 2010 10:29

Re: SQL Logik ohne Klammersetzung abbilden
 
Ich bin nicht sicher, ob das auch unter SQL gilt, aber AND hat eine stärkere Bindung als OR, so dass die Klammern im Beispiel somit überflüssig sind. Aber das ist wie gesagt keine gesicherte Aussage, da hilft im Notfall nur ausprobieren.

hoika 15. Apr 2010 10:41

Re: SQL Logik ohne Klammersetzung abbilden
 
Hallo,

Zitat:

Ich bin nicht sicher, ob das auch unter SQL gilt, aber AND hat eine stärkere Bindung als OR
In SQL gibt es (afaik) nicht.

Je nachdem, ob und wie oben Klammern stehen,
kommt ja was unterschiedliches raus.


Heiko

DeddyH 15. Apr 2010 10:44

Re: SQL Logik ohne Klammersetzung abbilden
 
Wenn mit und ohne Klammern unterschiedliche Ergebnismengen herauskommen, ist meine Vermutung widerlegt. Schade eigentlich :(

HolgerCW 15. Apr 2010 10:48

Re: SQL Logik ohne Klammersetzung abbilden
 
Mein Filter setzt die Klammer bei der Abfrage so:

Delphi-Quellcode:
Uhrzeit >= 21:30 AND (Uhrzeit <= 23:59 OR Uhrzeit >= 00:00) AND Uhrzeit <= 06:00
Kann man durch austauschen von AND OR <= <> die selbe Logik hinbekommen ?

Uwe Raabe 15. Apr 2010 11:04

Re: SQL Logik ohne Klammersetzung abbilden
 
Zitat:

Zitat von HolgerCW
Delphi-Quellcode:
Uhrzeit >= 21:30 AND (Uhrzeit <= 23:59 OR Uhrzeit >= 00:00) AND Uhrzeit <= 06:00

Da kommt aber was anderes heraus als im ersten Beispiel. Genauer gesagt ist das Ergebnis immer False. Allein die beiden äußeren Bedingungen können nicht gleichzeitig wahr sein (vorausgesetzt Uhrzeit bewegt sich im Bereich 00:00 - 23:59, was anderes wäre ja auch gar nicht definiert).

Wenn du herausfinden willst, ob es Nacht ist, reicht

Delphi-Quellcode:
Uhrzeit >= 21:30 OR Uhrzeit <= 06:00

HolgerCW 15. Apr 2010 11:52

Re: SQL Logik ohne Klammersetzung abbilden
 
Vielen dank. Das hilft mir schon sehr weiter. Das wusste ich gar nicht.

p80286 15. Apr 2010 15:38

Re: SQL Logik ohne Klammersetzung abbilden
 
würde dir so etwas vllt. weiter helfen:
SQL-Code:
Tab1.DATEXP BETWEEN TO_DATE('20080101','YYYYMMDD') AND TO_DATE('20090101','YYYYMMDD')
Das ist den Vergleichen mit >= und <= zwar sehr ähnlich aber man kann die Klammerung einfacher steuern!
(Bei der definierung durch den Benutzer etwa BETWEEN Anfangsdatum/Endedatum

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz