как запросить объект Datetime по дате? - PullRequest
5 голосов
/ 23 мая 2011

Я хочу запросить таблицу в соответствии с определенной датой, но проблема в том, что тип данных этого поля - datetime

select  * from  Supplier  where modified_Date='2011-05-07 12:52:16.830' 

этот запрос возвращает результат

но

 select  * from  Supplier  where modified_Date='2011-05-07' 

нет результата

Ответы [ 4 ]

6 голосов
/ 23 мая 2011

SQL Server 2008 имеет тип данных DATE. Вы можете привести ваш DATETIME к DATE и выполнить сравнение.

SELECT *
FROM   Supplier
WHERE  CAST(Modified_Date AS DATE) = '2011-05-07'

Ссылка: DateTime TransactSQL

3 голосов
/ 23 мая 2011

Вы должны разрешить для компонента времени, потому что 2011-05-07 <> 2011-05-07 12:52:16.830

Либо перейти на запрос типа диапазона

select  * from  Supplier  where
   modified_Date >= '2011-05-07' 
   and
   modified_Date < '2011-05-08' 

... или приведено на сегодняшний день, так как вы используете SQL Server 2008

select  * from  Supplier  where
   CAST(modified_Date AS date) = '2011-05-07' 

С точки зрения производительности, используйте первый. Или есть индексированный вычисляемый столбец, который выполняет CAST для вас, и вы фильтруете по этому

0 голосов
/ 23 мая 2011

Просто чтобы опубликовать альтернативный синтаксис ответа gbn, вы также можете использовать BETWEEN:

SELECT * 
FROM Supplier
WHERE modified_Date BETWEEN '2011-05-07' AND '2011-05-07 23:59:59:999'

РЕДАКТИРОВАТЬ: Вы должны указать время окончания как BETWEEN по умолчаниюдо полуночи, что в этом случае вернет дополнительные строки.

From BOL :

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

0 голосов
/ 23 мая 2011

Преобразование столбца в дату в вашем запросе выбора принесет результаты.

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