Inklusivität des „BETWEEN“-Operators von MS SQL Server
Beinhaltet der BETWEEN-Operator von MS SQL Server die Bereichsgrenzen? Mit anderen Worten: Funktioniert die folgende Abfrage:
SELECT foo FROM bar WHERE foo BETWEEN 5 AND 10
Werte auswählen, die genau 5 und 10 sind, oder werden diese Werte aus dem Bereich ausgeschlossen?
Antwort:
Der BETWEEN-Operator in MS SQL Server ist inklusiv, was bedeutet, dass er sowohl den Start- als auch den Endwert im angegebenen Bereich umfasst. Daher wählt die obige Abfrage Zeilen aus, in denen die foo-Spalte Werte zwischen 5 und 10 enthält.
Aus Books Online:
BETWEEN gibt TRUE zurück, wenn der Wert von test_expression ist größer oder gleich dem Wert von begin_expression und kleiner oder gleich dem Wert von end_expression.
DateTime-Vorbehalt:
Bei der Arbeit mit DateTimes ist es wichtig zu beachten, dass der Wert als Mitternacht an diesem Tag behandelt wird, wenn nur ein Datum angegeben wird. Um zu vermeiden, dass Zeiten innerhalb des Enddatums fehlen oder die Datenerfassung für die Daten des folgenden Tages doppelt erfolgt, wird empfohlen, 3 Millisekunden vom Enddatum abzuziehen. Dies liegt daran, dass jeder Wert, der weniger als 3 Millisekunden beträgt, auf Mitternacht des nächsten Tages aufgerundet wird.
Beispiel:
Um alle Werte innerhalb von Juni 2016 zu erhalten, verwenden Sie Folgendes Abfrage:
where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')
Dies wird übersetzt zu:
where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'
datetime2 und datetimeoffset:
Das Subtrahieren von 3 ms von einem Datum kann dazu führen, dass Zeilen im 3-ms-Fenster fehlen. Die effektivste Lösung ist die Verwendung der folgenden Operatoren:
where myDateTime >= '20160601' AND myDateTime < '20160701'
Das obige ist der detaillierte Inhalt vonEnthält der „BETWEEN'-Operator von MS SQL Server die Grenzwerte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!