[英]round GETDATE (SQL Server)
我有一个在MySQL中正常工作的函数
round((now()-ts/60) as tdiff
(将ts(也是日期时间)减去当前日期时间后的结果四舍五入)
尝试(失败)将其转换为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的日期时间,并且20180831164000为2018-08-31 16:40:00然后除以60得到6850891。
是否有补救措施?
问候,拉尔夫
根据文档 , GETDATE()
返回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
)。
我认为您想使用DATEDIFF函数:
DATEDIFF ( datepart , startdate , enddate )
DATEDIFF ( second, ts, GETDATE())
DATEDIFF ( second, ts, GETDATE())
DATEDIFF ( minute, ts, GETDATE())
DATEDIFF ( hour, ts, GETDATE())
第一个参数告诉它要返回的时间增量。
如果要查找两个值之间的差异,请使用datediff()
。 例如:
select datediff(day, getdate(), ts)
得到天的差异。
date_diff()
或相关函数在MySQL中也是正确的方法。
抱歉,我不知道我是否理解这个问题,您需要执行date-date / 60并取整结果吗?
在这种情况下,您必须使用DATEDIFF(“ Type return example DAYS”,GETDATE(),ts)更改减号(“-”)。
因此您将拥有ROUND((DATEDIFF(DAY,GETDATE(),ts)/ 60,0)
请尝试让我知道它是否适合您
再见
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.