轮GETDATE(SQL Server)

时间:2018-08-31 14:58:39

标签: sql sql-server

我有一个可以在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。

对此有补救办法吗?

致敬,拉尔夫

4 个答案:

答案 0 :(得分:2)

GETDATE()根据documentation返回datetimedatetime的精度为1/300秒,并且其精度无法更改。

如果您希望时间精确到一秒,则需要转换为datetime2(0)

SELECT CONVERT(datetime2(0),GETDATE());

但是,也不要使用GETDATE()-ts之类的语法。将函数DATEADDDATEDIFF用于日期数学。

我不知道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)

请尝试让我知道它是否对您有用

再见