【问题标题】: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 ());

但这并没有给我任何东西,所以我该怎么做呢

【问题讨论】:

  • 您还必须转换DateTimeModified

标签: 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 ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-20
            • 2014-02-24
            相关资源
            最近更新 更多