SQL Server: как избежать оператора между столбцом datetime? - PullRequest
2 голосов
/ 09 апреля 2011

У меня есть столбец даты и времени, и я хотел бы выбрать строки на основе этих столбцов.Мой запрос

SELECT *
FROM   dbo.mytable
WHERE  daycol BETWEEN '20110404' AND '20110406';

Это также принесет мне строку

2011-04-06 00:00:00.000

Что не правильно.Как этого избежать?Следует ли избегать между операторами с помощью столбцов даты и времени?

Ответы [ 3 ]

4 голосов
/ 09 апреля 2011

Вы можете использовать это if you don't want the row of 2011-04-06 00:00:00.000 date

SELECT *
FROM   dbo.mytable
WHERE  daycol >= '20110404' AND daycol < '20110406';
3 голосов
/ 09 апреля 2011

Обратите внимание, что это ожидаемое поведение BETWEEN
(См .: http://msdn.microsoft.com/en-us/library/ms187922.aspx)

Из статьи:

BETWEEN возвращает TRUE, если значение test_expression больше или равно значению begin_expression и меньше или равно значению end_expression.

Вы можете изменить выражение end_expression, чтобы получить результаты, отличные от полученных.

Или используйте операторы >=, <. Но будьте осторожны, если столбец, с которым вы сравниваете, равен DATETIME T-SQL преобразует '20110406' в '2011-04-06 00:00:00.000', поэтому учитывайте это при определении операторов, которые нужно использовать.

3 голосов
/ 09 апреля 2011

Если вы напишите эту строку:

WHERE daycol BETWEEN '20110404' AND '20110406';

Вы получаете:

WHERE '2011-04-04 00:00:00.000' <= daycol 
      and daycol <= '2011-04-06 00:00:00.000'

Between включительно. Если вы хотите исключить границы, измените <= на < в расширенной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...