Announcement

Collapse
No announcement yet.

AND - OR - Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AND - OR - Abfrage

    Hallo Zusammen,

    ich werd langsam irre. Ich habe ein riesen Problem mit einer AND-OR Abfrage.
    Ein Formular in dem ich Daten eingebe (Oracle-Tabelle) beinhaltet verschiedene Felder/Spalten:

    Erstellt am: Geschlossen am:

    Ich muss die Suche für einen Monat laufen lassen. Sie lautet:

    erstellt am: <= "01.11.2008" AND (erstellt am: >= 01.10.2008 OR Geschlossen am: >= "01.10.2008")

    Funktioniert auch. Mir werden alle Daten angezeigt, die für nach dem 01.10.2008 erstellt oder geschlossen wurden. Jedoch leider auch Daten, die nach dem 31.10.2008 geschlossen wurden. Diese möchte ich nicht sehen. Bzgl. der oberen Suche ist das eigentlich klar. Aber ich habe schon so viele Varianten durch. Ich finde die Lösung nicht. Hat jemand von Euch eine Idee?

    Grüße Felge

  • #2
    Wie lautet denn die Abfrage konkret ? Typischer Fehler ist, dass STRING -Typen verglichen werden und nicht DATE-Typen.

    Comment


    • #3
      Die Abfrage lautet genauso und funktioniert ja auch.
      Ich brauche lediglich noch die Einschränkung, dass Geschlossen am: auch kleiner als der 01.11.2008 ist.

      Comment


      • #4
        ich habs... - glaube ich -

        Ich glaube ich habs.... so muss es aussehen...

        (erstellt am >= "01.10.2008" AND erstellt am <= "01.11.2008") OR (geschlossen am: >= "01.10.2008" AND geschlossen am <= "01.11.2008")

        Comment


        • #5
          Vergleiche:
          Code:
          with a as
          (
          SELECT '31.10.2008' edat, '03.07.2008' gdat FROM dual
            UNION ALL
          SELECT '01.07.2008'     , '01.12.2008' FROM dual
            UNION ALL
          SELECT '03.10.2008'     , '12.10.2008' FROM dual
          )
          SELECT * FROM a
          WHERE edat <= '01.11.2008'
           AND (edat >= '01.10.2008' OR gdat >= '01.10.2008') 
          
          EDAT         	GDAT
          01.07.2008	01.12.2008
          mit
          Code:
          with a as
          (
          SELECT '31.10.2008' edat, '03.07.2008' gdat FROM dual
            UNION ALL
          SELECT '01.07.2008'     , '01.12.2008' FROM dual
            UNION ALL
          SELECT '03.10.2008'     , '12.10.2008' FROM dual
          )
          SELECT * FROM a
          WHERE to_date(edat,'DD.MM.YYYY') <= to_date('01.11.2008','DD.MM.YYYY')
           AND (to_date(edat,'DD.MM.YYYY') >= to_date('01.10.2008','DD.MM.YYYY') OR to_date(gdat,'DD.MM.YYYY') >= to_date('01.10.2008','DD.MM.YYYY')) 
          
          EDAT         	GDAT
          31.10.2008	03.07.2008
          01.07.2008	01.12.2008
          03.10.2008	12.10.2008

          Comment

          Working...
          X