繁体   English   中英

如何在SQL Server中比较日期时间?

[英]How to compare datetime in SQL Server?

如果日期时间介于2018/01/30 04:59:59.0002018/01/31 04:59:59.000之间,我必须显示日期2018/01/30

我有一个名为DataEntry的表。 我想按我的标准按日期移动这些记录。

此DataEntry表的TransferTime数据类型为datetime。

根据我的标准,如果TransferTime为2018/01/30 01:30:59.000则日期应为2018/01/29

我认为您可以简单地这样写:

select 
 case when DATEPART(HOUR,'2018/01/30 01:30:59.000') >= 05 then cast('2018/01/30 01:30:59.000' as date) 
      else cast(dateadd(Dd,-1,'2018/01/30 01:30:59.000' )as date) 
 end 

这有点模糊逻辑上的猜测,但也许使用CONVERTDATEADD吗?

WITH VTE AS(
    SELECT CONVERT(datetime2(3),DT) AS DT
    FROM (VALUES('20180130 04:59:59.000'),('20180131 01:00:34.000'),('20180130 01:30:59.000')) V(DT))
SELECT CONVERT(date, DATEADD(SECOND, -17999,DT)) AS D, DT
FROM VTE;

值得注意的是,您奇怪地指出'20180130 04:59:59.000' ''20180131 04:59:59.000'应该都在同一天( '20180130' )。 这没有任何意义,因为Days不会那样重叠。 因此,后者时间将显示为'20180131' ,因为恰好是24小时后。

如果是前者的时间实际上应该是'20180129' ,然后更改-17999-18000 ,或SECOND,-17999HOUR, -5

这也可以做到:

select cast(dateadd(second, -17999,Transfertime) as date)

是17999 = 4hs59m59s以秒为单位

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM