[英]How to compare datetime in SQL Server?
如果日期时间介于2018/01/30 04:59:59.000
和2018/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
这有点模糊逻辑上的猜测,但也许使用CONVERT
和DATEADD
吗?
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,-17999
到HOUR, -5
。
这也可以做到:
select cast(dateadd(second, -17999,Transfertime) as date)
是17999 = 4hs59m59s以秒为单位
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.