sql >> Databasteknik >  >> RDS >> Sqlserver

Inkluderar MS SQL Servers mellan intervallgränserna?

Operatören BETWEEN är inklusive.

Från Books Online:

BETWEEN returnerar TRUE om värdet oftest_expression är större än eller lika med värdet av begin_expression och mindre än eller lika med värdet avend_expression.

DateTime varning

OBS:Med DateTimes måste du vara försiktig; om endast ett datum anges tas värdet från midnatt den dagen; för att undvika att missa tider inom ditt slutdatum, eller upprepa insamlingen av följande dags data vid midnatt i flera intervall, bör ditt slutdatum vara 3 millisekunder före midnatt på dagen efter din till-datum. 3 millisekunder eftersom något mindre än detta och värdet kommer att avrundas uppåt till midnatt nästa dag.

t.ex. för att få alla värden inom juni 2016 måste du köra:

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

dvs.

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

datetime2 och datetimeoffset

Att subtrahera 3 ms från ett datum gör dig sårbar för saknade rader från 3 ms-fönstret. Den korrekta lösningen är också den enklaste:

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


  1. Installera icu4c version 63 med Homebrew

  2. MySQL:Välj alla datum inom ett intervall även om inga poster finns

  3. Formatera ett tal som en procentandel i MySQL

  4. Hur man använder frågedesignern i SQL Server