2015-03-18 2 views
0

Я пытаюсь отфильтровать значения на основе даты, которая должна быть в пределах сегодняшней даты. Я использую следующий запрос, однако запрос работает не так, как ожидалось.Отображение значений даты для текущей даты в SQL Server

Это то, что я использую в SQL Server.

select values 
from table 
where date between DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) 
      and GETDATE() 

Я ожидаю даты для фильтрации значений между «2015-03-18 00:00:00» AND «2015-03-18 23:59:59», если я выполнения запроса на 18 марта 2015 года.

Просим руководствоваться.

+0

что вы ожидаете от «DATEADD (MONTH, DATEDIFF (MONTH, 0, GETDATE()), 0) и GETDATE()« ?? –

ответ

1

Это гораздо лучше использовать >= и < чем BETWEEN:

SELECT * 
FROM Table 
WHERE 
    date >= CAST(CAST(GETDATE() AS DATE) AS DATETIME) 
    AND date < DATEADD(DAY, 1, CAST(CAST(GETDATE() AS DATE) AS DATETIME)) 

CAST(CAST(GETDATE() AS DATE) AS DATETIME) получит Вас текущую дату без времени части, которая 2015-03-18 00:00:00

DATEADD(DAY, 1, CAST(CAST(GETDATE() AS DATE) AS DATETIME)) поможет вам следующий день, снова без временной части.

Таким образом, в свою очередь, ваше WHERE условие будет:

WHERE 
    date >= '2015-03-18 00:00:00' 
    AND date < '2015-03-19 00:00:00' 

В качестве альтернативы, вы можете использовать это:

SELECT * 
FROM Table 
WHERE 
    date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)  -- beginning of this day 
    AND date < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, 0) -- beginning of next day 

Для более вычислений даты, относятся к этому article.

+0

Спасибо большое ... Это сработало! –

1

Как вы Expe cting значение между '2015-03-18 00:00:00' И '2015-03-18 23:59:59. поэтому вы можете просто сравнить только дату.

вы можете использовать Cast()/Convert():

SELECT * 
FROM Table 
WHERE 
    cast(date as date) =cast(getdate() as date) 

Она включала в себя 2015-03-18 00:00:00' AND '2015-03-18 23:59:59'