2017-07-11 16 views
0

從T-SQL中的存儲過程中,我想從系統中獲取時間。因此,例如,如果系統時間爲12:29,則函數應返回12:00,如果系統時間爲12:31,則函數應該返回13:00。如何從系統獲取時間? t-sql

我該怎麼做?

+1

[T-SQL的日期時間可能重複四捨五入分鐘和最近幾小時使用功能](https://stackoverflow.com/questions/6666866/t-sql-datetime-rounded-to-nearest-minute-and-nearest-hours-with-using-functions) –

回答

1

您可以使用DATEADD功能:

DECLARE @time TIME = '12:31:00' 

SELECT CAST(DATEADD(Hour,IIF(DATEPART(mi, @time)<=30,0,1),DATEADD(Hour, DATEDIFF(Hour, 0, @time), 0)) AS TIME); 

Rextester Demo

它是如何工作的:

  1. 截斷時間最接近的小時
  2. 加入1小時,如果分> 30(或改變邏輯,如果你需要處理秒)

編輯:

之前的SQL Server 2012中,你可以使用CASE代替IIF

DECLARE @time TIME = '12:31:00' 

SELECT CAST(DATEADD(Hour,CASE WHEN DATEPART(mi, @time)<=30 THEN 0 ELSE 1 END,DATEADD(Hour, DATEDIFF(Hour, 0, @time), 0)) AS TIME); 

Rextester Demo 2

+1

需要注意的是'IIF()'用於2012 + – BJones

+0

是的IIF是隻有2012+我有2008 – bircastri

+0

@bircastri這不是問題。只需與CASE交換IIF – lad2025