2010-03-08 4 views
0

J'ai une procédure stockée qui arrondit une colonne avec des dates en (aaaa: mm: jj hh: mm: ss) à la poignée de 10 minutes le plus proche (aaaa: mm: jj hh: mm)T-SQL - arrondi Date et normalisation

20100303 09: 46: 3000 ------> 20100303 09:50

mais je veux chage pour arrondir à la poignée de 15 minutes le plus proche:

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

voici mon code:

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

donc essentiellement vous voulez que nous fassions votre travail pour vous? Tout d'abord, vous devez déterminer comment fonctionne votre procédure stockée. Ensuite, vous devez le modifier en conséquence, –

+0

ne comprends pas comment vous « faire » un travail pour moi, je l'ai écrit ce code moi-même et il fonctionne parfaitement bien: il arrondit la minute de l'amende de 10 minutes le plus proche, je tentais ot rond à la 15 minutes et ne pouvait pas trouver quelque chose d'utile la plus proche, donc était à la recherche pour les pointeurs ... –

+0

pour d'autres intéressés en fait de donner des suggestions utiles ici est ce que je cherche: tour de sélection (46, -1) = 50 select round (46,?) = 45 sa ligne je dois changer mais avec quoi: cast (rond (DATEPART (Mi, [ajouter quand]), - 1) ---> remplacer -1 avec quoi ? –

Répondre

3

Pour arrondir un temps le plus proche 15 minutes ...

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