经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
获知某一年的母亲节,父亲节和感恩节日期
来源:cnblogs  作者:Insus.NET  时间:2019/5/13 8:54:08  对本文有异议

完成这个要求之前,可以先参考另外一个函数《获取当月的天数列表https://www.cnblogs.com/insus/p/10837900.html

然后要知道标题三个节日的常识,母亲节在每年5月份的第二个星期天,父亲节在每年6月份的第三个星期天,而感恩节是在每年的11月份第四个星期的星期四。

知道这些常识就好办了。

写一个SQL的自定义函数:

 

  1. SET ANSI_NULLS ON
  2. GO
  3.  
  4. SET QUOTED_IDENTIFIER ON
  5. GO
  6.  
  7. -- =============================================
  8. -- Author: Insus.NET
  9. -- Create date: 2019-05-12
  10. -- Update date: 2019-05-12
  11. -- Description: 获取节日日期
  12. -- =============================================
  13. CREATE FUNCTION [dbo].[svf_Festivals]
  14. (
  15. @StartYear INT,
  16. @EndYear INT
  17. )
  18. RETURNS @tempTable TABLE([ID] INT IDENTITY(1,1) PRIMARY KEY,[Year] [INT] NOT NULL,[Mother's Day] [DATETIME] NULL,[Father's Day] [DATETIME] NULL,[Thanksgiving Day] DATETIME)
  19. AS
  20. BEGIN
  21. WHILE @StartYear <= @EndYear
  22. BEGIN
  23. INSERT INTO @tempTable ([Year]) VALUES(@StartYear)
  24. UPDATE @tempTable SET [Mother's Day] = (
  25. SELECT [Date] FROM (
  26. SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-05-01')
  27. WHERE DATENAME(dw,[Date]) = 'Sunday') AS md
  28. WHERE [RowNumber] = 2)
  29. WHERE [Year] = @StartYear
  30.  
  31. UPDATE @tempTable SET [Father's Day] = (
  32. SELECT [Date] FROM (
  33. SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-06-01')
  34. WHERE DATENAME(dw,[Date]) = 'Sunday') AS fd
  35. WHERE [RowNumber] = 3)
  36. WHERE [Year] = @StartYear
  37. UPDATE @tempTable SET [Thanksgiving Day] = (
  38. SELECT [Date] FROM (
  39. SELECT ROW_NUMBER() OVER (ORDER BY [Date] ASC) AS [RowNumber], [Date] FROM [dbo].[tvf_DaysOfMonth](CAST(@StartYear AS NVARCHAR(4)) + '-11-01')
  40. WHERE DATENAME(dw,[Date]) = 'Thursday') AS td
  41. WHERE [RowNumber] = 4)
  42. WHERE [Year] = @StartYear
  43.  
  44. SET @StartYear = @StartYear + 1
  45. END
  46.  
  47. RETURN
  48. END
  49. GO
Source Code

 

下面是列出2019至2025年所有以上三个节日的日期,帮忙检查一下,是否正确?

 

原文链接:http://www.cnblogs.com/insus/p/10853256.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号