Как выбрать строки для определенной даты, игнорируя время в SQL Server
Учитывая таблицу с столбцом datetime, как мне запрашивать строки, где дата соответствует указанному мне значению, но игнорирует временную часть?
Например, select * from sales where salesDate = '11/11/2010'
Для этого запроса нас не волнует время. Другие запросы требуют компонент времени, поэтому мы не можем хранить только компонент даты.
Спасибо!
Ответы
Ответ 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'