Announcement

Collapse
No announcement yet.

Datumsintervall definieren

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

  • Datumsintervall definieren

    Hallo erstmal,
    da ich ziemlich neu auf dem Gebiet SQL-Queries bin, hab ich eine Frage:

    Was ist der einfachste und ÜBERSICHTLICHSTE Weg um z.B: Liefertermine abzufragen, die im nächsten Monat (also Oktober) datiert sind?
    Habs zuerst mit verknüpften dateadd und datediff-Funktionen versucht, hab jedoch nachdem ich fertig war nichtmehr verstanden was ich eigentlich gemacht habe und ob das Ergebnis überhaupt stimmt. Und bevor ich jetz 3000 Datensätze einzeln überprüfe wende ich mich an euch.
    Wäre für eure Hilfe sehr dankbar.

    LG, reschi

  • #2
    hi reschi,

    filter datums-angaben mit
    where datepart(month ,datum) = datepart(month ,getdate()) + 1

    grüße

    Comment


    • #3
      Hallo,
      Originally posted by Daman View Post
      ...where datepart(month ,datum) = datepart(month ,getdate()) + 1
      liefert dir aber auch den Oktober des Vorjahres und des Jahres davor und ...

      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


      • #4
        da host recht.

        musst dann wohl noch hinzufügen:
        Code:
        and datepart(year, datum) = datepart(year, getdate())

        Comment


        • #5
          Wenn man das Kriterium Performance mal über Einfachheit stellt würde ich vorschlagen beim klassischen between und ausrechnen der Datumsgrenzen zu bleiben. So ziehen auch eventuelle Indizes auf dem Lieferdatum.

          [Highlight=SQL]CREATE FUNCTION ufn_BeginOfMonth(@date DATETIME)
          RETURNS DATETIME
          BEGIN
          RETURN DATEADD(mm, DATEDIFF(mm,0,@date), 0)
          END

          CREATE FUNCTION ufn_EndOfMonth(@date DATETIME)
          RETURNS DATETIME
          BEGIN
          RETURN DATEADD(ms,-2,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))
          END

          select Daten
          from Tabelle
          where Lieferdatum between dbo.ufn_BeginOfMonth(DateAdd(mm, 1, getDate()))
          and dbo.ufn_EndOfMonth(DateAdd(mm, 1, getDate()))[/Highlight]
          Zuletzt editiert von Ralf Jansen; 16.09.2011, 15:27. Reason: Edit: SQL geändert. Es ging um nächsten MOnat nicht letzten Monat

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            Wenn man das Kriterium Performance mal über Einfachheit stellt würde ich vorschlagen beim klassischen between und ausrechnen der Datumsgrenzen zu bleiben. So ziehen auch eventuelle Indizes auf dem Lieferdatum.

            [Highlight=SQL]select Daten
            from Tabelle
            where Lieferdatum between dbo.ufn_BeginOfMonth(DateAdd(mm, 1, getDate()))
            and dbo.ufn_EndOfMonth(DateAdd(mm, 1, getDate()))[/Highlight]
            so wird SQL-Server auch die Indizes ignorieren..

            Die Funktionsergebnisse in Variablen packen und dann aufs SQL-loslassen
            [HIGHLIGHT="SQL"]DECLARE @Begin DATETIME; SET @Begin = dbo.ufn_BeginOfMonth(DateAdd(mm, 1, getDate()));
            DECLARE @Begin DATETIME; SET @End = dbo.ufn_EndOfMonth(DateAdd(mm, 1, getDate()));
            SELECT Daten
            FROM Tabelle
            WHERE Lieferdatum BETWEEN @Begin and @End;[/HIGHLIGHT]

            Comment

            Working...
            X