如何生成整个范围的日期? 谢谢生成日历
Q
生成日历
0
A
回答
0
由于米奇小麦的建议是他的评论,可能提高此查询性能的最佳方法是使用numbers table代替用于生成日期列表的递归CTE。
DECLARE @t TABLE(startdate DATETIME , enddate DATETIME)
INSERT INTO @t
SELECT '8/01/2009','08/31/2009' UNION ALL
SELECT '2/01/1900','02/28/1900' UNION ALL
SELECT '10/01/1959','10/31/1959'
DECLARE @n INT
SET @n = DATEDIFF(dd,'19000201','20090831') + 1
;WITH base
AS
(
SELECT 1 AS n
UNION ALL
SELECT n+1 FROM base
WHERE n < CEILING(SQRT(@n))
)
,cross_cte
AS
(
SELECT 0 AS c
FROM base AS b1
,base AS b2
)
,dates_cte
AS
(
SELECT TOP(@n) CAST('19000201' AS DATETIME) - 1 + ROW_NUMBER() OVER(ORDER BY c) AS date
FROM cross_cte
)
SELECT DISTINCT d.DATE
FROM Dates_Cte d
JOIN @t t
ON d.DATE BETWEEN t.startdate AND t.enddate
OPTION (MAXRECURSION 0);
虽然:
如果你不能或者不愿意使用一个数字表,日期范围CTE的性能可以使用由伊茨克奔甘建议的方法大范围提高执行计划显示此版本效率略低于原始版本(=〜1%),在我的系统上使用SET STATISTICS TIME
进行测量显示此版本的已用时间和CPU时间均小于您的一半。
+0
@ priyanka.bangalore - 该技术涉及有效地使用CTE生成大范围的数字,而不是专门针对日期。我认为它出自Solid Quality Learning的“Inside SQL Server 2005”书籍之一 - 我认为T-SQL编程之一 - http://www.amazon.co.uk/gp/product/0735621977 – 2010-02-25 09:51:28
相关问题
- 1. Asp.net日历 - 生成日期
- 2. 生成日历日期列表
- 3. 如何从简单的日历宝石生成日历
- 4. PHP在Google日历中生成日历 - 无效网址
- 5. Rails迁移以生成日历表
- 6. FullCalendar加载ajax不会生成日历
- 7. 生成动态日历控件
- 8. 在mysql/php中生成每周日历
- 9. 在iframe中生成多个日历
- 10. 生成Google日历兼容Feed
- 11. 使用日历表生成数据的历史视图
- 12. KAL日历集成
- 13. wscompile JAX-RPC生成日历对象而不是日期
- 14. 在Codeigniter日历中为每个日期生成唯一的URL
- 15. JS,jquery,全日历,学生
- 16. 将Fecha转换成日历
- 17. magento谷歌日历集成
- 18. Windows Mobile日历集成
- 19. Python生成器遍历树
- 20. 谷歌日历API V3 insert_calendar返回503,但日历已成功
- 21. 开源日历解决方案(与Google日历集成)
- 22. Nutch如何避免由CGI生成的抓取日历网页
- 23. 如何在生成“.ics”文件时自动打开Apple日历
- 24. PHP生成和日历mysql数据库命名HTML
- 25. Javascript生成的日历显示不同的Mozilla Firefox和铬
- 26. 在mysql的日历表中生成重复序列
- 27. 如何在C#web应用程序中生成日历?
- 28. 将事件ID添加到HTML完整日历生成
- 29. 将事件添加到javascript生成的日历
- 30. 未能导入生成ics文件到谷歌日历和Outlook
为什么你不想使用基于集合的数字表方法? – 2010-02-25 05:49:59