[英]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.