T-SQL - 日期舍入和规范化

时间:2010-03-08 00:46:53

标签: tsql

我有一个存储过程,将日期在(yyyy:mm:dd hh:mM:ss)的列舍入到最接近的10分钟句柄(yyyy:mm:dd hh:mM)

20100303 09:46:3000 ------> 20100303 09: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 name=@colname)
    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

1 个答案:

答案 0 :(得分:3)

将时间缩短到最近的15分钟...

Select GetDate(), 
       DateAdd(Minute, 15 * Round(DateDiff(minute, 0, GetDate())/15.0, 0), 0)
相关问题