sql 节假日判断(春节、中秋、国庆、周末等)
- set ANSI_NULLS ON
- set QUOTED_IDENTIFIER ON
- go
- -- 日期检测函数,返回相关节假日
- -- 0 非假日
- -- 农历相关假日
- -- 1 春节(正月初一 至 正月初七)
- -- 2 端午节(五月五日)
- -- 4 中秋节(八月十五)
- --阳历相关节日
- -- 8 元旦(1月1日)
- -- 16 清明节(4月5日/闰年 4月6日)
- -- 32 劳动节(5月1日)
- -- 64 国庆节(10月1日)
- --128 周末
- ALTER FUNCTION [dbo].[fnCheckDate](@solarDay DATETIME)
- RETURNS bigint AS
- BEGIN
- DECLARE @solData int
- DECLARE @offset int
- DECLARE @iLunar int
- DECLARE @i INT
- DECLARE @j INT
- DECLARE @yDays int
- DECLARE @mDays int
- DECLARE @mLeap int
- DECLARE @mLeapNum int
- DECLARE @bLeap smallint
- DECLARE @temp int
- DECLARE @YEAR INT
- DECLARE @MONTH INT
- DECLARE @DAY INT
- DECLARE @OUTPUTDATE varchar(100)
- DECLARE @OUTPUTDATA Bigint --返回数值
- SET @OUTPUTDATA = 0 --初始化为非假日
- --保证传进来的日期是不带时间
- SET @solarDay= convert(datetime,@solarDay,23)
- SET @offset=CAST(@solarDay-'1900-01-30' AS INT)
- print @solarDay
- print @offset
- return 0
- --确定农历年开始
- SET @i=1900
- WHILE @i<2050 AND @offset>0
- BEGIN
- SET @yDays=348
- SET @mLeapNum=0
- SELECT @iLunar=dataInt FROM SolarData WHERE yearId=@i
- --传回农历年的总天数
- SET @j=32768
- WHILE @j>8
- BEGIN
- IF @iLunar & @j >0
- SET @yDays=@yDays+1
- SET @j=@j/2
- END
- --传回农历年闰哪个月 1-12 , 没闰传回 0
- SET @mLeap = @iLunar & 15
- --传回农历年闰月的天数 ,加在年的总天数上
- IF @mLeap > 0
- BEGIN
- IF @iLunar & 65536 > 0
- SET @mLeapNum=30
- ELSE
- SET @mLeapNum=29
- SET @yDays=@yDays+@mLeapNum
- END
- SET @offset=@offset-@yDays
- SET @i=@i+1
- END
- IF @offset <=0
- BEGIN
- SET @offset=@offset+@yDays
- SET @i=@i-1
- END
- --确定农历年结束
- SET @YEAR=@i
- --确定农历月开始
- SET @i = 1
- SELECT @iLunar=dataInt FROM SolarData WHERE yearId=@YEAR
- --判断那个月是润月
- SET @mLeap = @iLunar & 15
- SET @bLeap = 0
- WHILE @i < 13 AND @offset > 0
- BEGIN
- --判断润月
- SET @mDays=0
- IF (@mLeap > 0 AND @i = (@mLeap+1) AND @bLeap=0)
- BEGIN--是润月
- SET @i=@i-1
- SET @bLeap=1
- --传回农历年闰月的天数
- IF @iLunar & 65536 > 0
- SET @mDays = 30
- ELSE
- SET @mDays = 29
- END
- ELSE
- --不是润月
- BEGIN
- SET @j=1
- SET @temp = 65536
- WHILE @j<=@i
- BEGIN
- SET @temp=@temp/2
- SET @j=@j+1
- END
- IF @iLunar & @temp > 0
- SET @mDays = 30
- ELSE
- SET @mDays = 29
- END
- --解除闰月
- IF @bLeap=1 AND @i= (@mLeap+1)
- SET @bLeap=0
- SET @offset=@offset-@mDays
- SET @i=@i+1
- END
- IF @offset <= 0
- BEGIN
- SET @offset=@offset+@mDays
- SET @i=@i-1
- END
- --确定农历月结束
- SET @MONTH=@i
- --确定农历日结束
- SET @DAY=@offset
- IF @bLeap=1
- SET @OUTPUTDATE=(CAST(@YEAR AS VARCHAR(4))+'-润'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2)))
- ELSE
- SET @OUTPUTDATE=(CAST(@YEAR AS VARCHAR(4))+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2)))
- DECLARE @tempStart NVARCHAR(20)
- DECLARE @tempEnd NVARCHAR(20)
- IF charindex('-润',@OUTPUTDATE) =0 -- 农历假期判断
- Begin
- -- 春节判断
- DECLARE @preYear int
- SET @preYear= YEAR(@solarDay)-1
- IF(@preYear%4=0 AND (@preYear%100<>0 or (@preYear%100=0 and @preYear%400=0)) )
- set @tempStart= Cast(@preYear AS VARCHAR(4)) +'12'+'29'
- Else
- set @tempStart= Cast(@preYear AS VARCHAR(4)) +'12'+'30'
- set @tempEnd =Cast(YEAR(@solarDay) AS VARCHAR(4)) +'01'+'06'
- IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) >= @tempStart AND Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) <= @tempEnd)
- SET @OUTPUTDATA =@OUTPUTDATA | 1
- --端午节判断
- set @tempStart= Cast(@preYear AS VARCHAR(4)) +'05'+'05'
- IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) = Convert(datetime,@tempStart))
- SET @OUTPUTDATA =@OUTPUTDATA | 2
- --中秋节
- set @tempStart= Cast(@preYear AS VARCHAR(4)) +'08'+'15'
- IF(Convert(datetime,CONVERT(varchar(100), @OUTPUTDATE, 23)) = Convert(datetime,@tempStart))
- SET @OUTPUTDATA =@OUTPUTDATA | 4
- End
- -- 阳历假期判断
- --元旦
- DECLARE @CurrentYear int
- SET @CurrentYear = YEAR(@solarDay)
- set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'01'+'01'
- IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
- SET @OUTPUTDATA =@OUTPUTDATA | 8
- --清明节
- IF(@CurrentYear%4=0 AND (@CurrentYear%100<>0 or (@CurrentYear%100=0 and @CurrentYear%400=0)))
- set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'04'+'04'
- ELSE
- set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'04'+'05'
- IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
- SET @OUTPUTDATA =@OUTPUTDATA | 16
- --五一
- set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'05'+'01'
- IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) = Convert(datetime,@tempStart))
- SET @OUTPUTDATA =@OUTPUTDATA | 32
- --十一
- set @tempStart= Cast(@CurrentYear AS VARCHAR(4)) +'10'+'01'
- set @tempEnd =Cast(@CurrentYear AS VARCHAR(4)) +'10'+'03'
- IF(Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) >= @tempStart AND Convert(datetime,CONVERT(varchar(100), @solarDay, 23)) <= @tempEnd)
- SET @OUTPUTDATA =@OUTPUTDATA | 64
- -- 周末判断
- IF((DATEPART(Weekday,@solarDay)+@@DATEFIRST-1)%7 =0 OR (DATEPART(Weekday,@solarDay)+@@DATEFIRST-1)%7 =6)
- SET @OUTPUTDATA =@OUTPUTDATA | 128
- RETURN @OUTPUTDATA
- END
sql 节假日判断(春节、中秋、国庆、周末等)相关推荐
- 中秋节图案 用java代码打出来_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法.doc...
基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 基于Java代码实现判断春节.端午节.中秋节等法定节假日的方法 这篇文章主要介绍了基于Java代码实现判断春节.端午节.中秋节等法定节假 ...
- 节假日判断工具(Java)
由来 节假日判断工具类:大厂接口要收费,小厂接口怕不稳定,索性自己写一个吧. 软件架构 spring boot,jdk1.8 原理:通过文本文件,维护每一年的假节日和调休日期.示例见/years/20 ...
- 长假余额为零!我用Python做了个中秋国庆双节拼图游戏
点击上方"菜鸟学Python",选择"星标"公众号 重磅干货,第一时间送达 今年的国庆长假非常长,不知不觉已经余额为零!朋友圈很多晒出游的照片,聚会的照片,吃吃 ...
- SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数
– SQL SERVER 判断是否存在某个触发器.储存过程 – 判断储存过程,如果存在则删除 IF (EXISTS(SELECT * FROM sysobjects WHERE name='proce ...
- SQL语句判断指定的数据库、表、字段、存储过程是否存在
SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...
- androidstudio 日历视图怎么显示农历_中秋国庆旅游攻略怎么做?用这个便签软件很简单...
九月已经到来,中秋节和国庆节距离我们也不远了,今年的中秋和国庆节重叠了有足足八天的假期.不少人都想趁着这个小长假出门旅游,要想保证旅游质量,那么就要做好攻略.中秋国庆旅游攻略怎么做? 要想做好一份中秋 ...
- SQL Server判断对象是否存在 (if exists (select * from sysobjects )
1 判断数据库是否存在 Sql代码 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] ...
- 木鸟民宿发布“中秋国庆出游住宿预测报告” 重庆、长沙最受欢迎
9月14日消息,木鸟民宿对外发布<2020年中秋国庆假期出游住宿预测报告>(以下简称"报告"),国庆假期最受欢迎的十大热门城市分别是:重庆.长沙.成都.上海.西安.青岛 ...
- 10月8日 团队管理专题 | 中秋国庆双节盛典
10月8日 团队管理专题 | 中秋国庆双节盛典 团队管理: 团队管理(team management)指在一个组织中,依成员工作性质.能力组成各种小组,参与组织各项决定和解决问题等事务,以提高组织生产 ...
最新文章
- C#和Sql Server 2005中时间的最大值和最小值
- Ubuntu: 为firefox安装flash插件
- 怎样卸载外壳扩展的DLL?
- 0429 Scrum团队成立与第6-7章读后感
- java string document_java - String 和 document 的相互转换总结
- jzoj3058-火炬手【高精度,暴力】
- js,在字符串中,查找某个字符的位置
- get set方法简化_简化开放科学的4种方法
- SpringBoot 的错误处理机制
- DL实战(3):cfNet- Matlab配置
- 黑群晖外网访问的完美解决方案【无公网IP】
- 江门android培训,基于selenium模块的江门市干部培训网络学院自动选课脚本
- 数据结构实验报告——线性表
- 使用IDEA创建Android项目
- Win10安装注册机出错?
- Jmeter-使用http proxy代理录制脚本
- 1223 Dice Roll Simulation
- 如何打造数字原生企业?易捷行云EasyStack有话要说
- pitfall override private method
- 【常见错误】浏览器显示网络没有连接:远程计算机或设备将不受连接,解决办法