mysql 节假日判断_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 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
mysql 节假日判断_sql 节假日判断(春节、中秋、国庆、周末等)相关推荐
- python语言判断中国节假日(pip install chinesecalendar)
判断某年某月某一天是不是工作日/节假日. 支持 2004年 至 2022年,包括 2020年 的春节延长. 一.安装 pip install chinesecalendar #默认安装是最新版版的1. ...
- 最简单判断工作日/节假日API
由于开发的系统需要根据工作日和节假日来进行逻辑判断,所以这里研究了下方案: 1. 自己维护一份日历表,把每天的日期类型标注清楚 之前的一家公司就是这样解决的,需要每年去手动更新.如果公司规模比较大,对 ...
- html判断是否节假日,C# 判断是否是节假日
1.引用Newtonsoft.Json.dll 2.用API /// /// 判断是不是节假日,节假日返回true /// /// 日期格式:yyyyMMdd /// public static bo ...
- python 中节假日(工作日)判断
python 中节假日(工作日)判断 安装包 pip install chinesecalendar 对以下日期进行节假日以及周末判断 2021-04-03 周六 清明节 2020-04-10 周六 ...
- MySQL 高级 - 存储过程 - 语法 - if判断 || 传递参数 (IN - 输入 OUT-输出)
MySQL 高级 - 存储过程 - 语法 - if判断 传递参数
- MYSQL ifnull 函数 、if判断 、case when、 locate函数
1.MYSQL ifnull 函数 .if判断 .case when. locate (1).IFNULL(expr1,expr2) 如果expr1为空(即NULL),返回expr2,如果expr1 ...
- mysql 永真_sql注入
Sql注入 Sql注入成因: 1)转义字符处理不当(如',--,/**/,会截断原有的语句,执行新语句): 2)类型处理不当(如接受的是整型的参数,并没有校验也可以接受字符型数据) 3)查询语句的组装 ...
- java 时间判断大小_java判断时间大小
//构造日期格式yyyy-MM-NN SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date d ...
- python怎么判断中文_python 判断是否为中文
python在执行代码过程是不知道这个字符是什么意思的.是否是中文,而是把所有代码翻译成二进制也就是000111这种形式,机器可以看懂的语言. 也就是在计算机中所有的字符都是有数字来表示的.汉字也是有 ...
最新文章
- Java 二分法查找
- C++中的日期和时间
- 神策数据助力海通证券,精耕 4 大场景,全面强化数字化运营
- Task 1 天池赛 - 二手车交易价格预测
- bytes转16进制整数 python_Python 十进制转二进制、八进制、十六进制
- 布局 —— 左侧固定,右侧自适应
- epoll和poll的C++11多线程练习
- Java在WEB项目中获取文件路径
- php 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
- python数据处理源代码_python数据分析与应用源数据和代码
- 培训机构刷题小程序设计与制作
- PLC 数据内存读写 调试软件工具
- mysql查询前100个_mysql查询前100条数据
- FPGA零基础学习:数字电路中的组合逻辑
- (二十三)Animator 实例 —— 开场动画
- 自媒体怎么赚钱?新手小白日入600+
- CSAPP_Chapter1
- 音乐播放器(vip在线听下载等等)~~正常运行
- 大球吃小球html5,怎么用html5制作简单的大球吃小球的游戏
- Como fazer uma要求GET de uma API REST em Java e转换器JSON em um objeto