Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Включват ли границите на диапазона между MS SQL Server?

Операторът BETWEEN включва.

От Книги онлайн:

BETWEEN връща TRUE, ако стойността на test_expression е по-голяма от или равна на стойността на begin_expression и по-малка или равна на стойността на end_expression.

Предупреждение за дата и час

NB:С DateTimes трябва да внимавате; ако е дадена само дата, стойността се взема към полунощ на този ден; за да избегнете пропускане на времена в крайната ви дата или повтаряне на заснемането на данните от следващия ден в полунощ в множество диапазони, крайната ви дата трябва да бъде 3 милисекунди преди полунощ на деня, следващ датата ви. 3 милисекунди, защото по-малко от това и стойността ще бъде закръглена до полунощ на следващия ден.

напр. за да получите всички стойности в рамките на юни 2016 г., ще трябва да изпълните:

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

т.е.

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

datetime2 и datetimeoffset

Изваждането на 3 ms от дата ще ви направи уязвими към липсващи редове от прозореца с 3 ms. Правилното решение е и най-простото:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте таблица в SQL Server 2017

  2. Използване на кортежи в SQL IN клауза

  3. Обединяване на припокриващи се интервали от дата

  4. Как се създава булево поле да/не в SQL сървър?

  5. TSQL - Как да използвам GO вътре в блок BEGIN .. END?