Подтвердить что ты не робот

Как выбрать строки для определенной даты, игнорируя время в SQL Server

Учитывая таблицу с столбцом datetime, как мне запрашивать строки, где дата соответствует указанному мне значению, но игнорирует временную часть?

Например, select * from sales where salesDate = '11/11/2010'

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

Спасибо!

4b9b3361

Ответ 1

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

SELECT * 
FROM sales 
WHERE CONVERT(DATETIME, FLOOR(CONVERT(FLOAT, salesDate))) = '11/11/2010'

Другой подход заключается в том, чтобы изменить выбор, чтобы охватывать все время между началом и концом даты:

SELECT * 
FROM sales 
WHERE salesDate BETWEEN '11/11/2010 00:00:00.00' AND '11/11/2010 23:59:59.999'

Ответ 2

Я знаю, что на этот вопрос было какое-то время, но я просто искал тот же ответ и нашел, что это, пожалуй, самое простое решение:

select * from sales where datediff(dd, salesDate, '20101111') = 0

Я действительно использую его больше, чтобы находить вещи в течение последних суток или двух, поэтому моя версия выглядит так:

select * from sales where datediff(dd, salesDate, getdate()) = 0

И, изменив 0 на сегодняшний день на 1, я получаю вчера транзакции, 2 - за день до этого и т.д. И если вы хотите все на прошлой неделе, просто измените equals на меньшее или равное:

select * from sales where datediff(dd, salesDate, getdate()) <= 7

Ответ 3

select * from sales where salesDate between '11/11/2010' and '12/11/2010' --if using dd/mm/yyyy

Более правильный способ сделать это:

DECLARE @myDate datetime
SET @myDate = '11/11/2010'
select * from sales where salesDate>[email protected] and salesDate<dateadd(dd,1,@myDate)

Если указана только дата, это означает полную полночь. Если вы хотите, чтобы интервалы не перекрывались, переключите между ними пару >= и <

вы можете сделать это в одном заявлении, но это просто, что значение используется дважды.

Ответ 4

Что-то вроде этого:

select 
  * 
from sales 
where salesDate >= '11/11/2010' 
  AND salesDate < (Convert(datetime, '11/11/2010') + 1)

Ответ 5

select 
  * 
from sales 
where 
  dateadd(dd, datediff(dd, 0, salesDate), 0) = '11/11/2010'

Ответ 6

Попробуйте следующее:

true
select cast(salesDate as date) [date] from sales where salesDate = '2010/11/11'
false
select cast(salesDate as date) [date] from sales where salesDate = '11/11/2010'