2012-07-02 4 views
0

У меня есть таблицы БД MS SQL 2008 с колонкой, как это:Найти данные на конкретный день, используя BETWEEN

Date 

2012-07-02 18:34:44.487 
2012-07-02 18:34:44.480 
2012-07-02 18:34:44.193 
2012-07-02 18:34:44.193 

Когда я

SELECT * 
FROM table1 
WHERE Date BETWEEN '2012-07-02' AND '2012-07-02' 

я ничего не получаю.

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

ответ

5

один способ

Select * from table1 where Date >= '2012-07-02' and Date < '2012-07-03' 

это также безопаснее, чем между, потому что с между вами будет также получить значение в полночь на 3 см How Does Between Work With Dates In SQL Server?

+0

+1 Также см http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do- между-и-devil-have-in-common.aspx и http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range- queries.aspx –

0

Использование dateadd

Select * 
from table1 
where Date between '2012-07-02' and dateadd(d,1,'2012-07-02') 

MSDN Docs http://msdn.microsoft.com/en-us/library/ms186819.aspx

Rough Таким образом, причиной этого является SQL обрабатывает строковые даты, такие как этот пример, как полночь данной даты. Так что вы на самом деле спрашиваю between midnight of 2012-07-02 and midnight of 2012-07-03

+4

помните, что он будет получать значение в полночь 2012-07-03 с помощью синтаксиса, см. здесь http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-does-between- work-with-dates-in-sql- – SQLMenace

+0

Хорошая точка. Спасибо за добавление – BLSully

0

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

Select * from table1 where CONVERT(Date,Date)='2012-07-02' 
+0

Это очень плохо с точки зрения производительности, поскольку он не может искать индекс из-за преобразования, которое вы делаете в столбце – SQLMenace

+0

@SQLMenace, что в данном случае неверно - SQL Server фактически имеет оптимизацию здесь который все еще позволяет использовать индекс. Но чтобы избежать путаницы, я бы действительно прекратил именовать столбцы ключевыми словами, потому что это преобразование просто выглядит забавным. –

+0

Аарон, правда .... Я забыл об этом .. Я даже писал об этом в блоге http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/converting-columns-to-date-from-datetime-2008 старею, я думаю :-) – SQLMenace

Смежные вопросы