2010-03-08 70 views
0

我有一個存儲過程,將(yyyy:mm:dd hh:mM:ss)中的日期四捨五入到最近的10分鐘句柄(yyyy:mm:dd hh:mM )T-SQL - 日期舍入和規範化

20100303 09:46:3000 ------> 20100303 9時50分

,但我想恰克它舍它至最接近15分鐘手柄:

20100303 09: 46:3000 ------> 20100303 09:45

這是我的代碼:

IF OBJECT_ID(N'[dbo].[SPNormalizeAddWhen]') IS NOT NULL 
     DROP PROCEDURE [dbo].[SPNormalizeAddWhen] 

GO 

CREATE PROCEDURE [dbo].[SPNormalizeAddWhen] 
As 
declare @colname nvarchar(20) 
set @colname='Normalized Add_When' 

if not exists (select * from syscolumns where id=object_id('Risk') and [email protected]) 
    exec('alter table Risk add [' + @colname + '] datetime') 


declare @sql nvarchar(500) 
set @sql='update Risk set [' + @colname + ']=cast(DATEPART(yyyy,[add when]) as nvarchar(4)) + ''-'' + cast(DATEPART(mm,[add when]) as nvarchar(2)) + ''-'' + cast(DATEPART(dd,[add when]) as nvarchar(2)) + '' '' + cast(DATEPART(Hh,[add when]) as nvarchar(2)) + '':'' + cast(round(DATEPART(Mi,[add when]),-1) as nvarchar(2)) ' 
print @sql 
exec(@sql) 
GO 
+0

所以基本上你要我們做工作的嗎?首先,你應該研究'你的'存儲過程是如何工作的。那麼你應該相應地改變它, – 2010-03-08 00:48:05

+0

不知道你是如何「爲我做」任何工作,我自己寫了這個代碼,它工作得很好:它把分鐘湊到最近的10分鐘的罰款,我試着ot它到最近的15分鐘,找不到任何有用的東西,所以一直在尋找指針... – 2010-03-08 01:31:31

+0

其他感興趣的人實際上給這裏有用的建議是我正在尋找: 選擇一輪(46,-1)= 50 選擇一輪(46,?)= 45 它的這一行我需要改變,但用什麼: cast(round(DATEPART(Mi,[add when]), - 1)---> ? – 2010-03-08 01:34:29

回答

3

爲了圓一個時間到最近15分鐘...

Select GetDate(), 
     DateAdd(Minute, 15 * Round(DateDiff(minute, 0, GetDate())/15.0, 0), 0)