SQL Server: выборка записей между двумя датами?

В SQL я пишу SELECT для извлечения данных между двумя датами, используя

Пример:

 select * from xxx where dates between '2012-10-26' and '2012-10-27' 

Но возвращаемые строки – только 26, а не 26 и 27.

Вы можете мне помочь? Спасибо.

Как ответили другие, у вас, вероятно, есть столбец DATETIME (или другой вариант), а не тип данных DATE .

Вот условие, которое работает для всех, включая DATE :

 SELECT * FROM xxx WHERE dates >= '20121026' AND dates < '20121028' --- one day after --- it is converted to '2012-10-28 00:00:00.000' ; 

@Aaron Bertrand сообщил об этом в блоге: Что у BETWEEN и у дьявола есть общее?

Вам нужно быть более явным и добавлять время начала и окончания, вплоть до миллисекунды:

 select * from xxx where dates between '2012-10-26 00:00:00.000' and '2012-10-27 23:59:59.997' 

База данных может очень хорошо интерпретировать '2012-10-27' как '2012-10-27 00:00:00.000' .

Недвусмысленный способ написать это (т.е. увеличить вторую дату на 1 и сделать ее < )

 select * from xxx where dates >= '20121026' and dates < '20121028' 

Если вы используете SQL Server 2008 или выше, вы можете сохранить CAST как DATE, сохраняя SARGability , например

 select * from xxx where CAST(dates as DATE) between '20121026' and '20121027' 

Это явно говорит SQL Server, что вас интересует только часть DATE столбца dates для сравнения с диапазоном BETWEEN.

Попробуй это:

 select * from xxx where dates >= '2012-10-26 00:00:00.000' and dates <= '2012-10-27 23:59:59.997' 

Ваш вопрос не спросил, как правильно использовать BETWEEN, а попросил о помощи с неожиданно усеченными результатами …

Как упоминалось / намекая в других ответах, проблема в том, что у вас есть сегменты времени в дополнение к датам.

По моему опыту, использование date diff стоит дополнительного износа на клавиатуре. Это позволяет вам точно выразить то, что вы хотите, и вы охвачены.

 select * from xxx where datediff(d, '2012-10-26', dates) >=0 and datediff(d, dates,'2012-10-27') >=0 

используя датифик, если первая дата предшествует второй дате, вы получаете положительное число. Существует несколько способов написать выше, например, всегда сначала поле, затем константу. Просто переверните оператора. Это вопрос личных предпочтений.

вы можете указать, хотите ли вы быть включенными или исключать конечные точки, отбрасывая один или оба одинаковых знака.

BETWEEN будет работать в вашем случае, поскольку конечные точки предполагаются полуночи (т.е. DATE). Если ваши конечные точки также были DATETIME, использование BETWEEN может потребовать еще большего литья. На мой взгляд, DATEDIFF был поставлен в нашу жизнь, чтобы изолировать нас от этих проблем.

попробуйте использовать следующий запрос

 select * from xxx where convert(date,dates) >= '2012-10-26' and convert(date,dates) <= '2012-10-27' 
  • Крыша DateTime до следующего значения определенного минутного интервала
  • Предложение WHERE, возвращающее неверные записи
  • Фильтр столбцов столбцов SQL-сервера SQL на определенную дату или диапазон дат
  • SQL Return Hours между двумя датами, за исключением выходных дней и без сдвига часов
  • датированный не возвращает то, что я ожидаю
  • Группа SQL Server по дате и по времени дня
  • Части времени отсутствует при использовании convert
  • datetime в sql изменяется только на дату моего приложения
  • Преобразование даты и времени в SQL Server
  • SQL Server: как выбрать записи с определенной датой из столбца datetime
  • Посещение моей базы данных с помощью платформы Entity Framework DateTimes
  • Interesting Posts

    Как работает ORDER BY ABS (CHECKSUM (NEWID ()))?

    Отдельное имя города из адресного запроса sql

    Временная таблица в разделе where

    Предложение T-SQL: WHERE в OVER (PARTITION BY … ORDER BY …)

    Использование значения столбца в качестве имени столбца в подзапросе

    Объединение Varchar и int

    Топ 1 налево Присоединиться к SubQuery

    Почему мой внешний ключ имеет значение NULL при вставке значений

    Хранимые процедуры не отображают временную таблицу, созданную в том же соединении

    SQL Server LIKE, содержащий символы скобок

    Я создал связанный сервер с SQL Azure, но не вижу таблицы в представлении Management Studio?

    Найдите все строки, которые содержат по меньшей мере X символов, упорядочиваются по подобию

    Справка с SQL-запросом с использованием случая и группы

    Вносить изменения в базу данных только в том случае, если все запросы выполняются успешно

    Умный способ использования SQLCMD с динамическим вызовом

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