Announcement

Collapse
No announcement yet.

trickreiche Abfrage mit Datumswerten

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

  • trickreiche Abfrage mit Datumswerten

    Hallo zusammen,

    folgene Problemstellung scheint mir nahezu alltäglich zu sein und doch habe ich seit Stunden das berühmte Brett vor dem Kopf... viellecht kann mir ja jemand mit einem Code-Schnipsel den richtigen Denkanstoss bieten. Vielen Dank...

    Gegeben sind eine Vertragszeitraum (bspw. für ein Zeitschriftenabo), bestehend aus Vertragsanfang (datetime, not null) und Vertragende (datetime, nullable), sowie eine Abfragezeitraum, bestehend aus Abfrageanfang (datetime, not null) und Abfrageende (datetime, not null). Nun möchte ich wissen, wieviele VOLLE Kalendermonate des Vertragszeitraums im Abfragezeitraum liegen.

    Beispiele:
    Vertragszeitraum 04.03.2010 bis 15.09.2010
    Abfragezeitraum 01.05.2010 bis 31.12.2010
    --> Ergebnis 4 (die Monate 05, 06, 07 und 08 des Jahres 2010)

    Vertragszeitraum 04.03.2010 bis NULL (ungekündigt)
    Abfragezeitraum 01.01.2010 bis 27.12.2010
    --> Ergebnis 8 (die Monate 04 bis 11 des Jahres 2010)

    Vertragszeitraum 04.03.2010 bis 08.10.2010
    Abfragezeitraum 01.12.2009 bis 09.03.2010
    --> Ergebnis 0

    Für jeden Stups in die richtige Richtung bin ich dankbar...

    Smilingahle

  • #2
    Die Grundlagen sind etwa wie folgt:

    - man nehme von Vertragszeitraum/Abfragezeitraum den größeren (bzw. nicht-NULL-seienden) Wert der beiden Startwerte
    - ist der Tag dieses Datums nicht der Erste, dann zähle 1 Monat dazu

    - man nehme von Vertragszeitraum/Abfragezeitraum den kleineren (bzw. nicht-NULL-seienden) Wert der beiden Endwerte

    - man berechne per DATEDIFF() die Differenz in Monaten = Ergebnis

    Das kann man jetzt entweder in ein riesengroßes einzelnes Statement packen oder man macht sich besser eine UDF (wäre mein Favorit).

    bye,
    Helmut

    Comment


    • #3
      gelöst - vielen Dank

      vielen Dank!

      Der entscheidende Tipp war die korrekte Anwendung des DateDiffs - das man damit auch "nur" Monate berechnen kann war mir entgangen...

      Die grundsätzliche Idee, künstlich die jeweiligen Datums-Grenzen auf die Monatsgrenzen zu verlegen und dann die Differenz auszurechen hatten wir auch schon - allerdings ist das Schleifenkonstrukt in einer eigens dafür geschriebenen Funktion nicht wirklich les- und wartbar...

      Dank des kleinen Schubs ist der Rest wohl leicht umzusetzen. Vielen Dank.

      Comment

      Working...
      X