Поиск SQL Query Date с использованием Между

Я просто запускаю этот запрос

Select * from ProjectData where logtime between '2012-09-25 12:00:00.000' and '2012-09-25 12:59:59.999' order by LogTime 

в попытке найти всю запись за 12 часов, мы записываем каждую секунду, поэтому я ожидал 3600 записей, но, к моему удивлению, у меня было 3601 запись, и последнее рекордное время было

 2012-09-25 13:00:00.000 

Любая идея, почему эта запись выбрана? Даже если Between включает данные значения, это значение выше условия. Я использую SQL Server 2012 Express Edition.

Попробуйте использовать тип данных DATETIME2 для столбца logtime

Запрос:

 DECLARE @temp TABLE (logtime DATETIME2) INSERT INTO @temp (logtime) VALUES ('20120925 12:00:00.000'), ('20120925 12:59:59.999'), ('20120925 13:00:00.000') SELECT * FROM @temp WHERE logtime BETWEEN '2012-09-25 12:00:00.000' AND '2012-09-25 12:59:59.999' ORDER BY logtime 

Вывод:

 logtime --------------------------- 2012-09-25 12:00:00.0000000 2012-09-25 12:59:59.9990000 

DATETIME против DATETIME2:

 SELECT name, [precision] FROM sys.types WHERE name IN ('datetime', 'datetime2') 

Вывод:

 name precision ----------- --------- datetime2 27 datetime 23 

Вы использовали Datetime как тип данных, и у него есть свойство округлять.

Значения Datetime и времени округляются до приращений .000, .003 или .007 секунд. Подробнее здесь
Например:

SQL Fiddle

Настройка схемы MS SQL Server 2012 :

Запрос 1 :

 Declare @testtime datetime = '2012-09-25 12:59:59.999' select @testtime 

Результаты :

 | COLUMN_0 | ------------------------------------ | September, 25 2012 13:00:00+0000 | 

Попробуйте выполнить этот запрос

 SELECT CAST('2012-09-25 12:59:59.999' AS DATETIME) 

Это выйдет 2012-09-25 13:00:00.000 . Поэтому я думаю, что именно поэтому ваш результат содержит запись со временем 2012-09-25 13:00:00.000 .

Таким образом, на самом деле он выбирает значения между 2012-09-25 12:00:00.000 и 2012-09-25 13:00:00.000

  • Ошибка «Недопустимое имя столбца» при вызове вставки после создания таблицы
  • Исключение основного ключа SQL
  • Разрешить удаленное подключение только для определенных пользователей
  • Получить размер вставленной строки в SQL Server
  • Могу ли я разработать SQL Server Express для последующего развертывания на полном SQL Server?
  • Сбой базы данных SQL Server 2012 Express
  • Вставьте 2 значения из двух разных таблиц в одну таблицу
  • Создание соединения с MDF-файлом в Visual Studio: «Файл используется»
  • Имея базовую проблему SQL с использованием Microsoft SQL Server 2012
  • MERGE продолжает пытаться вставить нуль
  • Не удается подключить образец базы данных в SQL Server 2012
  • Interesting Posts

    Генератор сценариев сервера Sql

    Ошибка Weird Entity Framework: сбой входа в систему для пользователя

    Подзапрос SQL / объединение

    Выполнение SQL-хранимой процедуры из представления SQL

    NServiceBus с передачей сообщений SQL Server

    Строка подключения SQL Server – другой домен

    Вставить в таблицу адресатов, если исходное значение отсутствует в таблице адресатов sql

    Изменение имени столбца в SQL Server 2008

    Добавление значений на основе дублированных данных

    Вычисление отклонений по датам в T-SQL

    Разбор / Разрушение Огромный комплекс XML-базы данных SQL Server 2008 (более 30 таблиц)

    В чем разница между SQLNCLI и поставщиком данных .NET Framework для SQL Server

    Ошибка доступа к базе данных при запуске azure web-приложения на dev-машине

    Как использовать sp_MSforeachtable для обновления столбца, который присутствует во всех таблицах базы данных?

    Насколько опасным может быть использование «Небезопасно» в SQL CLR?

    Давайте будем гением компьютера.