sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成

2020-07-04 06:02:00易采站长站整理

;with cte_table(CreatedDate) as
(
select cast(@strBegin as datetime)
union all
select dateadd(day, 1, CreatedDate)
from cte_table
where CreatedDate < @strEnd
)
insert into @tempResult
select convert(varchar(10), CreatedDate, 120)
from cte_table
option (maxrecursion 0)
end

return;
end
go

调用函数示例:


-- 示例1(数字):
select * from dbo.fun_ConcatStringsToTable(1, 10000)
-- 示例2(数字文本):
select * from dbo.fun_ConcatStringsToTable('1', '10000')
-- 示例3(日期):
declare @dateBegin datetime = '2009-1-1', @dateEnd datetime = '2018-12-31'
select * from dbo.fun_ConcatStringsToTable(@dateBegin, @dateEnd)
-- 示例4(日期文本):
select * from dbo.fun_ConcatStringsToTable('2009-1-1', '2018-12-31')

脚本运行结果:



 

  结论:

从上面几个图可以看到,通过简单调用

fun_ConcatStringsToTable
这个自定义表值函数,指定起止数字或日期,就达到了生成连续数字和日期的目的。

扩展:

如果想生成连续月份呢?博主在这里也帮大家写了一下脚本,如果需要可以在此基础上再自行做成表值函数:


with cte_table(CreatedDate) as
(
select cast('2017-12-1' as datetime)
union all
select dateadd(month, 1, CreatedDate)
from cte_table
where CreatedDate < '2018-04-01'
)
select convert(varchar(7), CreatedDate, 120) as YearMonth
from cte_table
option (maxrecursion 0)

总结

以上所述是小编给大家介绍的sql server使用公用表表达式CTE通过递归方式编写通用函数自动生成连续数字和日期 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:sqlserver实现树形结构递归查询(无限极分类)的方法使用SqlServer CTE递归查询处理树、图和层次结构sqlserver中存储过程的递归调用示例使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法SQLSERVER2005 中树形数据的递归查询sqlserver另类非递归的无限级分类(存储过程版)SQLserver2008使用表达式递归查询sqlserver数据库主键的生成方式小结(sqlserver,mysql)sqlserver 快速生成汉字的首拼字母的函数(经典)

相关文章 大家在看