Поэтому у меня есть несколько столбцов, которые содержат дату, время, как 2017-09-01 05:24:03.090
И я хочу получить только все столбцы с сегодняшнего дня, как 2017-09-01
Я пытался с
where item.DateTimeModified = CONVERT (date, GETDATE ());
Но это не дало мне ничего, так как именно я делаю это
5 ответов
Вам нужно конвертировать оба значения datetime.
В противном случае все значение даты-времени ìtem.DateModified
сравнивается с текущим значением даты.
WHERE CONVERT(date, item.DateTimeModified) = CONVERT(date, GETDATE());
where CONVERT(NVARCHAR,item.DateTimeModified,105) = CONVERT (NVARCHAR, GETDATE (),105);
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 ...
Вы можете сначала нормализовать измененную дату, а затем сравнить с нормализованной текущей датой. Для нормализации сначала конвертируйте дату в число с плавающей точкой, затем используйте floor, а затем конвертируйте его в datetime.
where cast(floor(cast(item.DateTimeModified as float)) as smalldatetime) = cast(floor(cast(GETDATE () as float)) as smalldatetime);
Это будет делать: -
CAST(item.DateTimeModified AS DATE) = CAST(GETDATE() AS DATE)
Похожие вопросы
Новые вопросы
sql-server
Microsoft SQL Server - это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. Д.). Не используйте этот тег для проблем, связанных с разработкой программного обеспечения и мобильных устройств, если только он не связан напрямую с базой данных.