Поэтому у меня есть несколько столбцов, которые содержат дату, время, как 2017-09-01 05:24:03.090

И я хочу получить только все столбцы с сегодняшнего дня, как 2017-09-01

Я пытался с

where item.DateTimeModified = CONVERT (date, GETDATE ());

Но это не дало мне ничего, так как именно я делаю это

0
Kewin Björk Nielsen 1 Сен 2017 в 09:01

5 ответов

Лучший ответ

Вам нужно конвертировать оба значения datetime.
В противном случае все значение даты-времени ìtem.DateModified сравнивается с текущим значением даты.

WHERE CONVERT(date, item.DateTimeModified) = CONVERT(date, GETDATE());
2
MatSnow 1 Сен 2017 в 06:09
where CONVERT(NVARCHAR,item.DateTimeModified,105) = CONVERT (NVARCHAR, GETDATE (),105);
2
Alfaiz Ahmed 1 Сен 2017 в 06:06

SARGABLE будет выглядеть следующим образом:

declare @Today as Date = Cast( GetDate() as Date ), @Tomorrow as Date;
set @Tomorrow = DateAdd( day, 1, @Today );

... where item.DateTimeModified >= @Today and item.DateTimeModified < @Tomorrow ...
0
HABO 1 Сен 2017 в 15:41

Вы можете сначала нормализовать измененную дату, а затем сравнить с нормализованной текущей датой. Для нормализации сначала конвертируйте дату в число с плавающей точкой, затем используйте floor, а затем конвертируйте его в datetime.

where cast(floor(cast(item.DateTimeModified as float)) as smalldatetime) = cast(floor(cast(GETDATE () as float)) as smalldatetime);
0
Prafulla 1 Сен 2017 в 06:21

Это будет делать: -

CAST(item.DateTimeModified AS DATE) = CAST(GETDATE() AS DATE)
0
Chamika Goonetilaka 1 Сен 2017 в 06:48