Benutzer mit den meisten Antworten
Kriegsfuss mit < / > / AND / OR in Zusammenhang mit Datum

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
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
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
-
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 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/ff959330TechNet 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 -
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
-
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]