Announcement

Collapse
No announcement yet.

Datumsabfrage zwischen zwei Feldern

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

  • Datumsabfrage zwischen zwei Feldern

    Hallo Leute,

    habe hier ein Problem und zwar habe ich zwei Date Felder

    Von und Bis.

    Jetzt würde ich gerne Abfragen welche Mitarbeiter zwischen den Jahren 2001 - 2005 gearbeitet haben. Darunter zählen auch Mitarbeiter die von 1990 - 2003 gearbeitet haben. Die Mitarbeiter die zwischen 1990 - 2000 gearbeitet haben fallen weg.

    Hoffe es war verständlich und vielen Dank für die Hilfe

  • #2
    Hallo,

    soche Bereichsabfragen inkl. Überschneidung der Ränder löst man mit:

    Code:
    FeldVon <= ParamBis AND FeldBis >= ParamVon
    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      AND to_date('01.01.2001','DD.MM.YYYY') <= feld.von
      AND to_date('01.01.2005','DD.MM.YYYY') >= feld.bis

      so ?

      da bekomme ich aber nur mitarbeiter die innerhalb dieses zeitraumes gearbeitet haben was ist mit den Leuten , die von 1995 - 2003 gearbeitet haben ?

      Comment


      • #4
        von <=2005 and bis between 2001 and 2005

        Comment


        • #5
          Super danke dir

          wie ist es denn nun richtig ?

          Variante 1 :
          feld1.von <= to_date('01.01.2001','DD.MM.YYYY')

          Variante 2 ?:
          AND to_date('01.01.2001','DD.MM.YYYY') <= feld1.von

          Wenn ich Variante 2 ausgebe kommen auch Mitarbeiter vor die bereits gar nicht mehr existieren also verstorben sind

          Comment


          • #6
            Originally posted by chrishelp View Post
            Super danke dir

            wie ist es denn nun richtig ?

            Variante 1 :
            feld1.von <= to_date('01.01.2001','DD.MM.YYYY')

            Variante 2 ?:
            AND to_date('01.01.2001','DD.MM.YYYY') <= feld1.von

            Wenn ich Variante 2 ausgebe kommen auch Mitarbeiter vor die bereits gar nicht mehr existieren also verstorben sind
            feld1.von <= to_date('31.12.2005','DD.MM.YYYY')
            and feld1.bis between '01.01.2001' and '31.12.2005'

            Retrospektiv betrachtet waren es ja Mitarbeiter, du willst ja wissen, wer zum Zeitpunkt x angestellt war und nicht wer nicht verstorben ist.
            Ansonsten halt die nicht gewünschten mit not exists oder so nicht berücksichtigen.

            Comment


            • #7
              super klappt wunderbar aber was ist jetzt mit den Mitarbeitern
              die 2002 angefangen haben zu Arbeiten bis 2008 ?

              Comment


              • #8
                Was ist mit Mitarbeitern welche z. B. von 2002 bis 2004 gearbeitet haben, sollen die dabei sein?
                Wenn nicht, kannst du es einfach so schreiben (die Felder sind nicht vertauscht, das muss so sein auch wenn es ein wenig ungewohnt ist):
                [highlight=sql]WHERE TO_DATE('01.01.2001', 'dd.mm.yyyy') BETWEEN von AND bis
                OR TO_DATE('01.01.2005', 'dd.mm.yyyy') BETWEEN von AND bis[/highlight]

                Wenn diese Mitarbeiter dabei sein sollen, kannst du es so machen:
                [highlight=sql]
                WHERE TO_DATE('01.01.2001', 'dd.mm.yyyy') BETWEEN von AND bis
                OR TO_DATE('01.01.2005', 'dd.mm.yyyy') BETWEEN von AND bis
                OR (von BETWEEN TO_DATE('01.01.2001', 'dd.mm.yyyy') AND TO_DATE('01.01.2005', 'dd.mm.yyyy')
                AND bis BETWEEN TO_DATE('01.01.2001', 'dd.mm.yyyy') AND TO_DATE('01.01.2005', 'dd.mm.yyyy')
                )[/highlight]

                Gruss
                Zuletzt editiert von Wernfried; 24.08.2011, 15:56. Reason: Hinweis

                Comment


                • #9
                  Originally posted by Martin R. View Post
                  feld1.von <= to_date('31.12.2005','DD.MM.YYYY')
                  and feld1.bis between '01.01.2001' and '31.12.2005'


                  Retrospektiv betrachtet waren es ja Mitarbeiter, du willst ja wissen, wer zum Zeitpunkt x angestellt war und nicht wer nicht verstorben ist.
                  Ansonsten halt die nicht gewünschten mit not exists oder so nicht berücksichtigen.
                  Originally posted by chrishelp View Post
                  super klappt wunderbar aber was ist jetzt mit den Mitarbeitern
                  die 2002 angefangen haben zu Arbeiten bis 2008 ?
                  [highlight=sql]
                  select * from feld1
                  where (
                  feld1.von <= to_date('31.12.2005','DD.MM.YYYY')
                  and feld1.bis between '01.01.2001' and '31.12.2005')
                  or feld1.von between '01.01.2001' and '31.12.2005';
                  [/highlight]

                  Comment


                  • #10
                    Hallo,

                    warum so kompliziert und warum noch mit BETWEEN bzw. OR ? Warum nicht einfach so wie in meinem ersten Post?
                    Originally posted by Falk Prüfer View Post
                    ...soche Bereichsabfragen inkl. Überschneidung der Ränder löst man mit:

                    Code:
                    FeldVon <= ParamBis AND FeldBis >= ParamVon
                    Das Feld von <= ParamBis und FeldBis >= ParamVon ist nicht etwa ein Schreibfehler, sondern so gewollt. Das ist die gleiche Bedingung wie das "komplizierte" OR, allerdings nach logischen Regeln gekürzt und zusammengefasst.

                    A und B seien die Abfragegrenzen, die drei Zeilen darunter sollen die vier möglichen Szenarien darstellen (reicht in den Zeitraum hinein, liegt komplett darin, reicht aus dem Zeitraum heraus, umschliesst den zeitraum komplett.

                    -----A-----B-----
                    --|-----|---------
                    -------|--|-------
                    --------|------|--
                    --|------------|--

                    Vlt. wir jetzt deutlich, dass in jedem Fall der linke Strich vor dem B und der rechte Strich nach dem A sein muss, um alle vier Bedingungen zu erfüllen.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X