none
Kriegsfuss mit < / > / AND / OR in Zusammenhang mit Datum RRS feed

  • Frage

  • Guten Tag

    Ich brauche Hilfe, stehe momentan völlig auf dem Schlauch.

    Auf der DB habe ich zwei Felder: HOSEINTRITTDAT und HOSAUSTRITTDAT

    Ich möchte nun alle Patienten angezeigt bekommen, welche in der Zeit, die ich über zwei Parameter (@VonDatum und @BisDatum) eingebe, hier sind.

    Mein Versuch, welcher aber nicht korrekt ist:

    WHERE ((cast(HOSEINTRITTDAT as Date) <= @VonDatum AND cast(HOSAUSTRITTDAT as DATE) >= @VonDatum) OR (cast(HOSEINTRITTDAT as Date) >= @BisDatum and cast(HOSAUSTRITTDAT as DATE) <= @BisDatum))

    Mein Resultat sollte so aussehen bei @VonDatum = 01.01.2014; @BisDatum = 31.12.2014

    HOSEINTRITTDAT     HOSAUSTRITTDAT

    30.11.2013                   28.12.2013         sollte nicht angezeigt werden

    29.12.2013                   01.01.2014         sollte angezeigt werden

    02.02.2014                   28.02.2014         sollte angezeigt werden

    01.07.2014                   31.07.2014         sollte angezeigt werden

    24.12.2014                   03.01.2015         sollte angezeigt werden

    01.01.2015                   05.01.2015         sollte nicht angezeigt werden

    Für Hilfe bin ich sehr dankbar

    Freundliche Grüsse

    Walo



    • Bearbeitet W_Beck Mittwoch, 17. Dezember 2014 13:25
    Mittwoch, 17. Dezember 2014 13:23

Antworten

  • Hallo Walo,

    warum castest Du die Felder in Date? Das sollten doch hoffentlich schon Datumsspalten sein, oder?

    Bzgl. des SQL Statements probier es mal so:

    WHERE (
              HOSEINTRITTDAT BETWEEN @VonDatum AND @BisDatum
           OR HOSAUSTRITTDAT BETWEEN @VonDatum AND @BisDatum
          )
    ...

    oder auch:

    WHERE (
              @VonDatum BETWEEN HOSEINTRITTDAT AND HOSAUSTRITTDAT
           OR @BisDatum BETWEEN HOSEINTRITTDAT AND HOSAUSTRITTDAT
          )
    ...
     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    • Als Antwort markiert W_Beck Donnerstag, 18. Dezember 2014 11:14
    • Bearbeitet Stefan FalzModerator Donnerstag, 18. Dezember 2014 13:03 Schreibfehler im SQL Statement
    Mittwoch, 17. Dezember 2014 14:04
    Moderator

Alle Antworten

  • Hallo Walo,

    warum castest Du die Felder in Date? Das sollten doch hoffentlich schon Datumsspalten sein, oder?

    Bzgl. des SQL Statements probier es mal so:

    WHERE (
              HOSEINTRITTDAT BETWEEN @VonDatum AND @BisDatum
           OR HOSAUSTRITTDAT BETWEEN @VonDatum AND @BisDatum
          )
    ...

    oder auch:

    WHERE (
              @VonDatum BETWEEN HOSEINTRITTDAT AND HOSAUSTRITTDAT
           OR @BisDatum BETWEEN HOSEINTRITTDAT AND HOSAUSTRITTDAT
          )
    ...
     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    • Als Antwort markiert W_Beck Donnerstag, 18. Dezember 2014 11:14
    • Bearbeitet Stefan FalzModerator Donnerstag, 18. Dezember 2014 13:03 Schreibfehler im SQL Statement
    Mittwoch, 17. Dezember 2014 14:04
    Moderator
  • Hallo Walo,

    verstehe ich richtig, dass Patienten aufgelistet werden sollen, die zwischen @VonDatum und @BisDatum eingetragen sind?

    Dann ist dein Ausdruck logisch nicht korrekt und müsste lauten:

    WHERE ((cast(HOSEINTRITTDAT as Date) >= @VonDatum AND cast(HOSAUSTRITTDAT as DATE) <= @BisDatum)
    
    

    Wird nun das gewünschte Ergebnis angezeigt?

    Viele Grüße, 
    Tobias Heilig
    TechNet Deployment Hotline    

    TechNet Deployment-Hotline

    Disclaimer:

    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die TechNet Deployment Hotline: http://technet.microsoft.com/de-de/ff959330

    TechNet Deployment-Hotline
    Telefon: 0800-6087338*
    Email: msdn-technet-support@escde.net

    * 16:00 – 18:00 Uhr (außer an bundeseinheitlichen Feiertagen). Kostenfrei aus dem dt. Festnetz, Mobilfunknetz ggfs. abweichend. Anrufer aus Österreich und der Schweiz können die Telefon-Hotline aus technischen Gründen über +49 721 693 7233 zum Tarif für Auslandsverbindungen des jeweiligen Telefonanbieters erreichen.
    Es gelten Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zu Datenschutz und Cookies. Bitte beachten Sie auch die gesonderten Nutzungsbedingungen für die Deployment-Hotline

    Mittwoch, 17. Dezember 2014 14:09
  • Hallo Stefan

    Herzlichen Dank, werde es ausprobieren und mich dann morgen melden.

    Zu Deiner Bemerkung wegen casten, ja ich muss es casten, da die Daten auf der DB als Text ('20140120') vorliegen, was ich nicht ändern kann.

    Freundliche Grüsse

    Walo

    Mittwoch, 17. Dezember 2014 14:16
  • Dann hoffe ich mal, ihr habt nicht als zu viele Patienten, denn das wird ein Perfomanzkiller, den so kann nie ein Index verwendet werden.

    Da es ISO Format (YYYYMMTT) ist, könntest Du das Cast auch weg lassen und textuell vergleichen, Ergebnis ist das gleiche, nur Datumsberechnungen kannst Du dann nicht durchführen.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 17. Dezember 2014 14:28
  • Hallo Stefan

    Das Zweite funktioniert tadellos

    Herzlichen Dank

    Walo

    Donnerstag, 18. Dezember 2014 11:17