Ich habe eine Tabelle mit dem Namen Product_Sales
und sie enthält Daten wie diese
Product_ID | Sold_by | Qty | From_date | To_date
-----------+---------+-----+------------+-----------
3 | 12 | 7 | 2013-01-05 | 2013-01-07
6 | 22 | 14 | 2013-01-06 | 2013-01-10
8 | 11 | 9 | 2013-02-05 | 2013-02-11
Was ist nun die Abfrage, wenn ich Verkaufsdaten zwischen zwei Daten aus einem Datumsbereich auswählen möchte?
Zum Beispiel möchte ich Verkaufsdaten von 2013-01-03
bis auswählen 2013-01-09
.
Antworten:
Wie Sie sehen, gibt es zwei Möglichkeiten, um Dinge zu erledigen:
Offensichtlich ist der zweite Weg viel einfacher (nur zwei Fälle gegen vier).
Ihr SQL sieht folgendermaßen aus:
quelle
WHERE NOT
Bedingung nicht verwenden möchten oder können, reicht es auch aus, die Operatoren umzudrehen und ein Gleiches hinzuzufügen:SELECT * FROM Product_sales WHERE From_date <= @RangeTill OR To_date >= @RangeFrom
Sie müssen alle Möglichkeiten abdecken. From_Date oder To_Date können zwischen Ihrem Datumsbereich liegen oder die Aufnahmedaten können den gesamten Bereich abdecken.
Wenn eines von
From_date
oderTo_date
zwischen den Daten liegt oderFrom_date
kleiner als das Startdatum undTo_date
größer als das Enddatum ist; dann sollte diese Zeile zurückgegeben werden.quelle
Versuchen Sie folgende Abfrage, um Daten zwischen dem Bereich zu erhalten:
quelle
start_date
aber zwischenstart_date
und endeten , nicht abgedecktend_date
. Auf der anderen Seite ist die Frage nicht klar genug, ich denke, wir haben keine Ahnung, ob wir Verkäufe tätigen sollten, die ausschließlich zwischen bestimmten Daten oder Daten liegen, die teilweise den Datumsbereich enthalten, sich aber auf der einen oder der anderen Seite oder auf beiden Seiten erstrecken können. Das Grundproblem besteht also darin, dass die Frage wohl nicht klar ist.quelle
Dies umfasst alle Bedingungen, die Sie suchen.
quelle
quelle
Bitte versuche:
quelle
Nur meine 2 Cent finde ich die Verwendung des Formats "TT-MMM-JJJJ" am sichersten, da der Datenbankserver unabhängig von den regionalen Einstellungen auf dem Server weiß, was Sie wollen. Andernfalls können möglicherweise Probleme auf einem Server auftreten, dessen regionale Datumseinstellungen auf JJJJ-TT-MM festgelegt sind (aus welchen Gründen auch immer).
So:
Bei mir hat es immer gut funktioniert ;-)
quelle
Dies funktioniert unter SQL_Server_2008 R2
quelle
quelle
Diese Abfrage hilft Ihnen:
quelle
quelle
Überprüfen Sie diese Abfrage. Ich habe diese Abfrage erstellt, um zu überprüfen, ob das Eincheckdatum über die Runde mit Reservierungsdaten liegt
Dadurch werden die überlappenden Details erneut ausgeführt, um die nicht überlappenden Details zu erhalten. Entfernen Sie dann das 'NICHT' aus der Abfrage
quelle
Sie können auch versuchen, folgende Fragmente zu verwenden:
quelle
Dies ist einfach. Verwenden Sie diese Abfrage, um ausgewählte Daten aus dem Datumsbereich zwischen zwei Daten zu finden
quelle
Sie sollten Datumsangaben in SQL genauso vergleichen wie Zahlenwerte.
quelle
Hier finden Sie eine Abfrage, um alle Produktverkäufe zu finden, die im August ausgeführt wurden
Fügt außerdem eine case-Anweisung hinzu, um die Abfrage zu validieren
quelle
quelle
Dies ist einfach. Verwenden Sie diese Abfrage, um das zu finden, was Sie möchten.
quelle