1. set ANSI_NULLS ON
  2. set QUOTED_IDENTIFIER ON
  3. go
  4. -- 日期检测函数,返回相关节假日
  5. -- 0 非假日
  6. -- 农历相关假日
  7. -- 1 春节(正月初一 至 正月初七)
  8. -- 2 端午节(五月五日)
  9. -- 4 中秋节(八月十五)
  10. --阳历相关节日
  11. -- 8 元旦(1月1日)
  12. -- 16 清明节(4月5日/闰年 4月6日)
  13. -- 32 劳动节(5月1日)
  14. -- 64 国庆节(10月1日)
  15. --128 周末
  16. ALTER  FUNCTION   [dbo].[fnCheckDate](@solarDay DATETIME)
  17. RETURNS   bigint   AS
  18. BEGIN
  19. DECLARE   @solData   int
  20. DECLARE   @offset   int
  21. DECLARE   @iLunar   int
  22. DECLARE   @i   INT
  23. DECLARE   @j   INT
  24. DECLARE   @yDays   int
  25. DECLARE   @mDays   int
  26. DECLARE   @mLeap   int
  27. DECLARE   @mLeapNum   int
  28. DECLARE   @bLeap   smallint
  29. DECLARE   @temp   int
  30. DECLARE   @YEAR   INT
  31. DECLARE   @MONTH   INT
  32. DECLARE   @DAY   INT
  33. DECLARE   @OUTPUTDATE   varchar(100)
  34. DECLARE   @OUTPUTDATA   Bigint   --返回数值
  35. SET @OUTPUTDATA = 0   --初始化为非假日
  36. --保证传进来的日期是不带时间
  37. SET   @solarDay= convert(datetime,@solarDay,23)
  38. SET   @offset=CAST(@solarDay-'1900-01-30' AS INT)
  39. print @solarDay
  40. print @offset
  41. return 0
  42. --确定农历年开始
  43. SET   @i=1900
  44. WHILE   @i<2050   AND   @offset>0
  45. BEGIN
  46. SET   @yDays=348
  47. SET   @mLeapNum=0
  48. SELECT   @iLunar=dataInt   FROM   SolarData   WHERE   yearId=@i
  49. --传回农历年的总天数
  50. SET   @j=32768
  51. WHILE   @j>8
  52. BEGIN
  53. IF @iLunar & @j   >0
  54. SET @yDays=@yDays+1
  55. SET @j=@j/2
  56. END
  57. --传回农历年闰哪个月   1-12   ,   没闰传回   0
  58. SET   @mLeap   = @iLunar & 15
  59. --传回农历年闰月的天数   ,加在年的总天数上
  60. IF   @mLeap > 0
  61. BEGIN
  62. IF   @iLunar & 65536 > 0
  63. SET   @mLeapNum=30
  64. ELSE
  65. SET   @mLeapNum=29
  66. SET   @yDays=@yDays+@mLeapNum
  67. END
  68. SET   @offset=@offset-@yDays
  69. SET   @i=@i+1
  70. END
  71. IF   @offset <=0
  72. BEGIN
  73. SET   @offset=@offset+@yDays
  74. SET   @i=@i-1
  75. END
  76. --确定农历年结束
  77. SET   @YEAR=@i
  78. --确定农历月开始
  79. SET   @i = 1
  80. SELECT   @iLunar=dataInt   FROM   SolarData   WHERE   yearId=@YEAR
  81. --判断那个月是润月
  82. SET   @mLeap   =   @iLunar   &   15
  83. SET   @bLeap   =   0
  84. WHILE   @i < 13 AND @offset   >   0
  85. BEGIN
  86. --判断润月
  87. SET   @mDays=0
  88. IF   (@mLeap   >   0   AND   @i   =   (@mLeap+1)   AND   @bLeap=0)
  89. BEGIN--是润月
  90. SET   @i=@i-1
  91. SET   @bLeap=1
  92. --传回农历年闰月的天数
  93. IF   @iLunar   &   65536   >   0
  94. SET   @mDays   =   30
  95. ELSE
  96. SET   @mDays   =   29
  97. END
  98. ELSE
  99. --不是润月
  100. BEGIN
  101. SET   @j=1
  102. SET   @temp   =   65536
  103. WHILE   @j<=@i
  104. BEGIN
  105. SET   @temp=@temp/2
  106. SET   @j=@j+1
  107. END
  108. IF   @iLunar & @temp   >   0
  109. SET @mDays = 30
  110. ELSE
  111. SET   @mDays   =   29
  112. END
  113. --解除闰月
  114. IF   @bLeap=1   AND   @i=   (@mLeap+1)
  115. SET   @bLeap=0
  116. SET   @offset=@offset-@mDays
  117. SET   @i=@i+1
  118. END
  119. IF   @offset   <=   0
  120. BEGIN
  121. SET   @offset=@offset+@mDays
  122. SET   @i=@i-1
  123. END
  124. --确定农历月结束
  125. SET   @MONTH=@i
  126. --确定农历日结束
  127. SET   @DAY=@offset
  128. IF   @bLeap=1
  129. SET   @OUTPUTDATE=(CAST(@YEAR   AS   VARCHAR(4))+'-润'+CAST(@MONTH   AS   VARCHAR(2))+'-'+CAST(@DAY   AS   VARCHAR(2)))
  130. ELSE
  131. SET   @OUTPUTDATE=(CAST(@YEAR   AS   VARCHAR(4))+CAST(@MONTH   AS   VARCHAR(2))+'-'+CAST(@DAY   AS   VARCHAR(2)))
  132. DECLARE @tempStart NVARCHAR(20)
  133. DECLARE @tempEnd   NVARCHAR(20)
  134. IF charindex('-润',@OUTPUTDATE) =0  -- 农历假期判断
  135. Begin
  136. -- 春节判断
  137. DECLARE @preYear int
  138. SET @preYear= YEAR(@solarDay)-1
  139. IF(@preYear%4=0 AND (@preYear%100<>0 or (@preYear%100=0 and @preYear%400=0)) )
  140. set @tempStart= Cast(@preYear AS VARCHAR(4)) +'12'+'29'
  141. Else
  142. set @tempStart= Cast(@preYear AS VARCHAR(4)) +'12'+'30'
  143. set @tempEnd =Cast(YEAR(@solarDay) AS VARCHAR(4)) +'01'+'06'
  144. IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) >= @tempStart AND Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) <= @tempEnd)
  145. SET @OUTPUTDATA =@OUTPUTDATA | 1
  146. --端午节判断
  147. set @tempStart= Cast(@preYear AS VARCHAR(4)) +'05'+'05'
  148. IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) = Convert(datetime,@tempStart))
  149. SET @OUTPUTDATA =@OUTPUTDATA | 2
  150. --中秋节
  151. set @tempStart= Cast(@preYear AS VARCHAR(4)) +'08'+'15'
  152. IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) = Convert(datetime,@tempStart))
  153. SET @OUTPUTDATA =@OUTPUTDATA | 4
  154. End
  155. -- 阳历假期判断
  156. --元旦
  157. DECLARE @CurrentYear int
  158. SET @CurrentYear = YEAR(@solarDay)
  159. set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'01'+'01'
  160. IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
  161. SET @OUTPUTDATA =@OUTPUTDATA | 8
  162. --清明节
  163. IF(@CurrentYear%4=0 AND (@CurrentYear%100<>0 or (@CurrentYear%100=0 and @CurrentYear%400=0)))
  164. set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'04'+'04'
  165. ELSE
  166. set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'04'+'05'
  167. IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
  168. SET @OUTPUTDATA =@OUTPUTDATA | 16
  169. --五一
  170. set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'05'+'01'
  171. IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
  172. SET @OUTPUTDATA =@OUTPUTDATA | 32
  173. --十一
  174. set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'10'+'01'
  175. set @tempEnd =Cast(@CurrentYear AS VARCHAR(4)) +'10'+'03'
  176. IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) >= @tempStart AND Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) <= @tempEnd)
  177. SET @OUTPUTDATA =@OUTPUTDATA | 64
  178. -- 周末判断
  179. IF((DATEPART(Weekday,@solarDay)+@@DATEFIRST-1)%7 =0 OR (DATEPART(Weekday,@solarDay)+@@DATEFIRST-1)%7 =6)
  180. SET @OUTPUTDATA =@OUTPUTDATA | 128
  181. RETURN   @OUTPUTDATA
  182. END

sql 节假日判断(春节、中秋、国庆、周末等)相关推荐

  1. 中秋节图案 用java代码打出来_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法.doc...

    基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 这篇文章主要介绍了基于Java代码实现判断春节.端午节.中秋节等法定节假 ...

  2. 节假日判断工具(Java)

    由来 节假日判断工具类:大厂接口要收费,小厂接口怕不稳定,索性自己写一个吧. 软件架构 spring boot,jdk1.8 原理:通过文本文件,维护每一年的假节日和调休日期.示例见/years/20 ...

  3. 长假余额为零!我用Python做了个中秋国庆双节拼图游戏

    点击上方"菜鸟学Python",选择"星标"公众号 重磅干货,第一时间送达 今年的国庆长假非常长,不知不觉已经余额为零!朋友圈很多晒出游的照片,聚会的照片,吃吃 ...

  4. SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数

    – SQL SERVER 判断是否存在某个触发器.储存过程 – 判断储存过程,如果存在则删除 IF (EXISTS(SELECT * FROM sysobjects WHERE name='proce ...

  5. SQL语句判断指定的数据库、表、字段、存储过程是否存在

    SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...

  6. androidstudio 日历视图怎么显示农历_中秋国庆旅游攻略怎么做?用这个便签软件很简单...

    九月已经到来,中秋节和国庆节距离我们也不远了,今年的中秋和国庆节重叠了有足足八天的假期.不少人都想趁着这个小长假出门旅游,要想保证旅游质量,那么就要做好攻略.中秋国庆旅游攻略怎么做? 要想做好一份中秋 ...

  7. SQL Server判断对象是否存在 (if exists (select * from sysobjects )

    1 判断数据库是否存在 Sql代码 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名]   ...

  8. 木鸟民宿发布“中秋国庆出游住宿预测报告” 重庆、长沙最受欢迎

    9月14日消息,木鸟民宿对外发布<2020年中秋国庆假期出游住宿预测报告>(以下简称"报告"),国庆假期最受欢迎的十大热门城市分别是:重庆.长沙.成都.上海.西安.青岛 ...

  9. 10月8日 团队管理专题 | 中秋国庆双节盛典

    10月8日 团队管理专题 | 中秋国庆双节盛典 团队管理: 团队管理(team management)指在一个组织中,依成员工作性质.能力组成各种小组,参与组织各项决定和解决问题等事务,以提高组织生产 ...

最新文章

  1. C#和Sql Server 2005中时间的最大值和最小值
  2. Ubuntu: 为firefox安装flash插件
  3. 怎样卸载外壳扩展的DLL?
  4. 0429 Scrum团队成立与第6-7章读后感
  5. java string document_java - String 和 document 的相互转换总结
  6. jzoj3058-火炬手【高精度,暴力】
  7. js,在字符串中,查找某个字符的位置
  8. get set方法简化_简化开放科学的4种方法
  9. SpringBoot 的错误处理机制
  10. DL实战(3):cfNet- Matlab配置
  11. 黑群晖外网访问的完美解决方案【无公网IP】
  12. 江门android培训,基于selenium模块的江门市干部培训网络学院自动选课脚本
  13. 数据结构实验报告——线性表
  14. 使用IDEA创建Android项目
  15. Win10安装注册机出错?
  16. Jmeter-使用http proxy代理录制脚本
  17. 1223 Dice Roll Simulation
  18. 如何打造数字原生企业?易捷行云EasyStack有话要说
  19. pitfall override private method
  20. 【常见错误】浏览器显示网络没有连接:远程计算机或设备将不受连接,解决办法

热门文章

  1. 外网浏览器访问 docker 容器内服务
  2. 谷歌浏览器chrome扩展插件-农名的世界脚本
  3. 解决Realtek High Definition Audio麦克风音量过低的简易方法
  4. 使用keil5中的RL_TCPNet中间件建立一个工程
  5. 浅谈:Java和C语言各自的学习难度
  6. 操作系统PV大题_小和尚老和尚喝水问题
  7. 全同态加密研究资源汇总
  8. Win11任务栏大小调整
  9. 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创
  10. Centos7.5 BCM4322无线网卡驱动安装踩坑记录