Mehrere Zeitspannen in Sql-Select-Abfrage
Derzeit arbeite ich an C# mit Sql Server-Sprache, versuchen, um eine Abfrage zu entwerfen, wo ich auswählen Quartalen(Q1, Q2, Q3, Q4).
Mein Problem ist, dass, angenommen, wenn der Benutzer von den front-end-wählt nur Q1 dann kann ich die Abfrage, um den Datumsbereich für das Quartal Q1, und wenn der Benutzer auswählt, Q1 und auch Q2, dann kann ich immer noch den Datumsbereich für Q1 und Q2, weil Sie fallen unter Reihenfolge von Zeiträumen.
Aber wenn der Benutzer wählt Q1 und Q3 dann wie bereite ich Datumsbereich Abfrage(entweder in der gespeicherten Prozedur oder einfache select-Abfrage) und excecute für diese.
War ich versucht, mit diesem aber keine Verwendung.
where CDate in(cdate between '2015-05-20' and '2015-06-01'
and CDate between '2016-06-03' and '2016-06-04'
select * from MM where @innerstring
Den @innerstring will ich senden, der als parameter an die gespeicherte sql-Prozedur und dann vorbereiten/ausführen.
aber ich will nicht zu benutzen, temp-Tabelle speichern, Abfrage der Daten für saperate Datumsbereiche, und dann union, das Ergebnis. weil ich habe verschiedene Parameter mit mir als gut.
Dank.
- Warum der MySQL-tag?
- Sie haben zum hinzufügen von Beispieldaten und das erwartete Ergebnis, die wir nicht vollständig verstehen, was Sie tun möchten, mit quaters oder Termine.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht die
in
. Sollte dies funktionieren:Beachten Sie, dass
between
mit dates können gefährlich sein/midleading, als Aaron Bertrand erläutert, in eine interessante blog. Ich würde für:Dies sicher funktioniert, auch wenn
cdate
hat eine zeitliche Komponente.where ((cdate >= '2015-05-20' and cdate < '2015-06-02') or (cdate >= '2016-06-03' and cdate < '2016-06-05') )
Wenn Sie möchten, wählen Sie Datums-ranges basierend auf Quartalen, könnte man eine Kalender-Tabelle zu erleichtern. Das folgende Beispiel verwendet Ausschnitte aus Erstellung eines date-dimension oder Kalender-Tabelle in SQL-Server - Aaron Bertrand.
Kalender und zahlen, Tabellen Referenz:
Von dort aus könnten Sie ein Tabelle geschätzten parameter (TVP) eine Reihe von Vierteln, in die wählen Sie. Beispiel:
Wenn Sie wollen, eine Reihe von Datums-Bereiche, die man tun könnte etwas wie diese:
Tabelle geschätzten parameter Referenz:
Alternative zu den TVPs, können Sie split die
@innerstring
variable.Obigen Beispiel übernimmt ein Trennzeichen ';', und verwendet Jeff Moden ist DelimitedSplitN4k (Kommentare entfernt, leicht umformatiert).
aufteilen strings Referenz: