Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Enthält MS SQL Server zwischen den Bereichsgrenzen?

Der BETWEEN-Operator ist inklusive.

Aus Books Online:

BETWEEN gibt TRUE zurück, wenn der Wert von test_expression größer oder gleich dem Wert von begin_expression und kleiner oder gleich dem Wert von end_expression ist.

DateTime-Vorbehalt

NB:Bei DateTimes müssen Sie vorsichtig sein; wenn nur ein Datum angegeben ist, wird der Wert von Mitternacht an diesem Tag genommen; Um zu vermeiden, dass Zeiten innerhalb Ihres Enddatums fehlen oder die Erfassung der Daten des folgenden Tages um Mitternacht in mehreren Bereichen wiederholt wird, sollte Ihr Enddatum 3 Millisekunden vor Mitternacht am Tag nach Ihrem Bis-Datum liegen. 3 Millisekunden, da bei weniger als diesem Wert am nächsten Tag auf Mitternacht aufgerundet wird.

z.B. Um alle Werte innerhalb von Juni 2016 zu erhalten, müssen Sie Folgendes ausführen:

where myDateTime between '20160601' and DATEADD(millisecond, -3, '20160701')

d.h.

where myDateTime between '20160601 00:00:00.000' and '20160630 23:59:59.997'

datetime2 und datetimeoffset

Wenn Sie 3 ms von einem Datum abziehen, werden Sie anfällig für fehlende Zeilen aus dem 3-ms-Fenster. Die richtige Lösung ist auch die einfachste:

where myDateTime >= '20160601' AND myDateTime < '20160701'