【问题标题】:how to only select where date time is newest如何仅选择日期时间最新的位置
【发布时间】:2017-09-01 06:01:56
【问题描述】:
所以我有一些包含日期、时间的列,例如 2017-09-01 05:24:03.090
我只想获取当前的所有列,例如 2017-09-01
我一直在尝试
where item.DateTimeModified = CONVERT (date, GETDATE ());
但这并没有给我任何东西,所以我该怎么做呢
【问题讨论】:
标签:
sql-server
tsql
datetime
【解决方案1】:
您需要转换两个日期时间值。
否则ìtem.DateModified 的整个日期时间值将与当前日期值进行比较。
WHERE CONVERT(date, item.DateTimeModified) = CONVERT(date, GETDATE());
【解决方案2】:
where CONVERT(NVARCHAR,item.DateTimeModified,105) = CONVERT (NVARCHAR, GETDATE (),105);
【解决方案3】:
您可以先规范化修改日期,然后与规范化的当前日期进行比较。对于规范化,首先将日期转换为浮点数,然后使用地板,然后将其转换为日期时间。
where cast(floor(cast(item.DateTimeModified as float)) as smalldatetime) = cast(floor(cast(GETDATE () as float)) as smalldatetime);
【解决方案4】:
这样就可以了:-
CAST(item.DateTimeModified AS DATE) = CAST(GETDATE() AS DATE)
【解决方案5】:
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 ...