SqlServer的自定义函数可以分为三类但我只用过上面两类,可以称作标量函数和表值函数,区别只是返回数据的类型,表值函数返回的是一个虚拟表
SqlServer的函数在这里
因某种需求我写了一个这样的函数:输入时开始日期和结束日期,输出是一个表,从开日期到结束日期内的所有日期
比如我输入时20140701,20140708,输出是这样的
代码如下,欢迎指正
CEATE FUNCTION [dbo].[fn_GetDays](@startdate DATE,@enddate DATE) RETURNS TABLE AS RETURN( SELECT DATEADD(day,number,@startdate) AS days FROM master..spt_values WHERE TYPE = ‘P‘ AND DATEADD(DAY,number,@startdate) <= @enddate )
代码解释:
如下语句是从SqlServerMaster表中取得连续的数值,如下代码能取到1~2047的连续数值
SELECT number FROM master..spt_values WHERE TYPE = ‘P‘
这句是SqlServer系统函数,不多说
DATEADD(DAY,number,@startdate)
下面是 另一个函数逻辑和上面的很类似,作用是取十分钟位单位的时间
CREATE FUNCTION [dbo].[fn_GetTenMis](@startDatetime DATETIME,@endtDateime DATETIME) RETURNS TABLE AS RETURN( select DATEADD(MI,number*10,@startDatetime) AS TenMis from master..spt_values where type = ‘P‘ and DATEADD(MI,number*10,@startDatetime) <= @endtDateime )