我有一个可以在MySQL中正常工作的函数
round((now()-ts/60) as tdiff
(从ts(也是日期时间)中减去当前日期时间的结果除以60)
尝试(失败)将其转换为SQL Server。
尝试-
round((GETDATE()-ts/60) as tdiff
但这导致回合函数需要2或3个参数(对我来说确实如此),因此将其修改为-
round((GETDATE()-ts/60,0) as tdiff
但这会导致数据类型(GETDATE和ts)在减法运算符中不兼容。
因此,我然后尝试将GETDATE和ts都强制转换为日期,这没有什么区别。
ts是常规的日期时间,即 2918-04-20 11:05:09我以为GETDATE返回的格式相同。
例如,如果GETDATE是今天,ts是2018-04-20 11:05:09,则tdiff是 6850891(舍入有效地去除了破折号和冒号,并将日期时间连接为2018-04-20 11:05:09的日期时间20180420110509和2018-08-31 16:40:00的日期时间为20180831164000,然后除以60得到6850891。>
对此有补救办法吗?
致敬,拉尔夫
答案 0 :(得分:2)
GETDATE()
根据documentation返回datetime
。 datetime
的精度为1/300秒,并且其精度无法更改。
如果您希望时间精确到一秒,则需要转换为datetime2(0)
:
SELECT CONVERT(datetime2(0),GETDATE());
但是,也不要使用GETDATE()-ts
之类的语法。将函数DATEADD
和DATEDIFF
用于日期数学。
我不知道GETDATE()-ts/60
试图达到什么目的。也许2分钟之间的分钟数是多少? DATEDIFF
计算2个日期/时间之间的“滴答声”,因此DATEDIFF(MINUTE,'00:00:59','00:01:00')
将返回1
,尽管两次之间只有1秒。这是因为分钟值已经“滴答”了一次(从0到1)。因此,您可能要使用DATEDIFF(SECOND,'00:00:59','00:01:00') / 60
。这将返回0,因为整数数学中的1 / 60
为0(59 / 60
也是如此)。
答案 1 :(得分:0)
我认为您想使用DATEDIFF函数:
DATEDIFF ( datepart , startdate , enddate )
DATEDIFF ( second, ts, GETDATE())
DATEDIFF ( second, ts, GETDATE())
DATEDIFF ( minute, ts, GETDATE())
DATEDIFF ( hour, ts, GETDATE())
第一个参数告诉它要返回的时间增量。
答案 2 :(得分:0)
如果要查找两个值之间的差,请使用datediff()
。例如:
select datediff(day, getdate(), ts)
获取天数差异。
date_diff()
或相关功能在MySQL中也是正确的方法。
答案 3 :(得分:0)
对不起,我不知道我是否理解这个问题,您需要执行date-date / 60并将结果取整吗?
在这种情况下,您必须使用DATEDIFF(“类型返回示例DAYS”,GETDATE(),ts)更改减号(“-”)。
因此您将拥有ROUND((DATEDIFF(DAY,GETDATE(),ts)/ 60,0)
请尝试让我知道它是否对您有用
再见