Sqlserver计算本年度工作日
--@StartDate 本年度第一天
--@EndDate 本年度最后一天
DECLARE @StartDate DATETIME = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)
DECLARE @EndDate DATETIME = DATEADD(ms, -3,
DATEADD(yy,
DATEDIFF(yy, 0, GETDATE()) + 1,
0))
IF EXISTS ( SELECT *
FROM tempdb..sysobjects
WHERE id = OBJECT_ID('tempdb..#tb_work') )
BEGIN
DROP TABLE #tb_work
END
CREATE TABLE #tb_work
(
RN INT ,
WorkDate DATE ,--日期
DeWeek NVARCHAR(10) ,--星期几
IsWork NVARCHAR(10) --是否上班
)
INSERT INTO #tb_work
( RN ,
WorkDate ,
DeWeek
)
SELECT ROW_NUMBER() OVER ( ORDER BY CAST(DATEADD(day, number,
@StartDate) AS DATE) ) ,
CAST(DATEADD(day, number, @StartDate) AS DATE) AS dt ,
DATENAME(WEEKDAY,
CAST(DATEADD(day, number, @StartDate) AS DATE))
FROM master.dbo.spt_values
WHERE type = 'P'
AND number <= DATEDIFF(day, @StartDate, @EndDate) SELECT * FROM #tb_work;

下面根据自己数据库配置的情况更新表中的“是否上班”的字段
例如我们有个配置表如下:

我们先把配置表里的节假日信息数据填充到临时表
UPDATE tw WITH(ROWLOCK)
SET tw.IsWork = TB.IsShipment
FROM #tb_work tw WITH ( ROWLOCK )
INNER JOIN EDI_BaseHoliday tb ON Tw.WorkDate = tb.Holiday

由于我们公司除配置表配置的节假日外,周末是休息的,那么将临时表中没更新“是否工作日”的字段进行update
UPDATE #tb_work
SET IsWork = ( CASE WHEN DeWeek = '星期六'
OR DeWeek = '星期日' THEN 'N'
ELSE 'Y'
END )
WHERE ISNULL(IsWork, '') = ''
这样本年度的节假日信息就出来了

Sqlserver计算本年度工作日的更多相关文章
- SQL计算实际工作日(天)及两个时间(工作日)间隔(小时)!
Code highlighting produced by Actipro CodeHighlighter (freeware)-->去掉法定节假日(周六,周天)和指定节假日 USE [DBNa ...
- sqlserver计算时间差DATEDIFF 函数
DATEDIFF 函数 [日期和时间] 功能 返回两个日期之间的间隔. 语法 DATEDIFF ( date-part, date-expression-1, date-expression-2 ) ...
- sqlserver计算日期
在网上找到的一篇文章,相当不错哦O(∩_∩)O~ 这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一 ...
- sqlserver 计算数据库时间差
介绍:datediff(datepart,startdate,enddate) 返回间隔datepart 的数 SELECT datediff(yy,'2010-06-1 10:10',GETDATE ...
- sqlserver 计算 百分比
,),))+'%' As 百分比 NUMERIC(P,S) P的默认值是:38 S的默认值是:-84~127 numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数, ...
- SqlServer计算周岁的函数
CREATE Function Dbo.GetAge ( @birthday datetime, @now datetime ) Returns int As Begin Declare @Age i ...
- Sqlserver 计算两坐标距离函数
mark if exists (select * from dbo.sysobjects where id = object_id(N'UF_ETL_GetDistance') and xtype i ...
- sqlserver 计算同比,环比增长
/****** Script for SelectTopNRows command from SSMS ******/ SELECT [fdSequenceID] ,[fdInnerTime] ,[f ...
- SQLserver技巧
(1) SQL标记 连接连个表然后用 DATA COMPAREDATA进行区分select 'DATA ' ,'列名1','列名2','列名3' from 表 union select 'COM ...
随机推荐
- hdu1062
#include<stdio.h> #include<string.h> int main() { int i,n,len,j,k,t; char s1]; scanf(&qu ...
- (PHP)redis List(列表)操作
/** * * List操作 * 列表操作 * 可理解为数组操作 * 插入.删除数据按照一定规律排列的 * 元素可重复 * 适用于队列 * */ //在列表头部插入一个值one,当列表不存在时自动创建 ...
- 洛谷P1171 售货员的难题
P1171 售货员的难题 题目背景 数据有更改 题目描述 某乡有n个村庄(1<n<20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且 ...
- JNI/NDK开发
公司的新需求终于解决完了,离测试和发布还有段时间,第一次体验了下没需求没bug的感觉,真是舒爽~然后翻了翻有什么可以学的.无意翻到了Android后期发展的五大趋势.一.性能优化.二.高级UI.三.J ...
- Hadoop集群配置免密SSH登录方法
Hadoop集群包含1个主节点和3个从节点,需要实现各节点之间的免密码登录,下面介绍具体的实现方法. 一.Hadoop集群环境 二.免密登录原理 每台主机authorized_keys文件里面包含的主 ...
- 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- Groovy xlsx
如果在JMeter安装的“bin”文件夹下有Excel(xlsx)文件,则test.xlsx可以使用以下方法动态填充请求参数: 将tika-app.jar添加到JMeter Classpath 重新启 ...
- $each 遍历json字符串
$.each遍历json对象 查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1",&qu ...
- LDAP--对某些AD属性值是字节数组byte[]情况的类型转换方法
//BitConverter.ToBoolean((searchResult.Properties["mDBUseDefaults"][0] as byte[]), 0); row ...