簡體   English   中英

輪GETDATE(SQL Server)

[英]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這樣的語法。 對日期數學使用函數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 )。

我認為您想使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM