问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL语句如何统计a时间和b时间有多少个工作日?

发布网友 发布时间:2022-05-03 16:50

我来回答

4个回答

懂视网 时间:2022-05-03 21:11

/*
因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。
设定是一个星期有5个工作日,从星期一到星期五
说明:
  第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
  末一个星期的工作日数:DATEPART(dw, @enddt),最多5天
计算方法:
  如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”
  否则按下面的公式计算
    (两个日期间的总天数 - 第一个星期的天数 - 末一个星期的天数) / 7 * 5
  + 第一个星期的工作日数
  + 末一个星期的工作日数
*/

 --计算并返回两个日期间的工作小时数(工作日*8)按周一到周五计算
--必须先SET DATEFIRST 1
CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME)
 RETURNS INTEGER
AS BEGIN
 DECLARE @hours INTEGER
 IF @@DATEFIRST <> 1 OR @bdate > @edate
 RETURN -1
 SELECT @hours =
 --如果终止日期与起始日期在同一个星期内,只需要计算有几天即可
 CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
  CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0
  WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate)
  ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
 --如果终止日期与起始日期在不同的星期内
 --首先计算出除前后两个星期外完整的星期数 * 5
 ELSE (DATEDIFF(dd,@bdate,@edate)
  - (8-DATEPART(dw, @bdate))
  - DATEPART(dw, @edate-1)) / 7 * 5
  --再加上第一个星期里的工作日数
  + CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate)
  ELSE 0 END
  --加上末一个星期里的工作日数
  + CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END
 END * 8
 RETURN @hours
END

热心网友 时间:2022-05-03 18:19

首先保证,a 与 b 表的时间是 date 或者 datetime 类型:
1、Oracle 写法:

select sum (case when to_char(a.time,'d')-1>=1 and to_char(a.time,'d')-1<=5 then 1
else 0
end)
from tablename a;
2.MSSQL 和 Sybase 写法:

select sum(case when datepart(weekday,a.datetime)-1 >=1 and datepart(weekday,a.datetime)-1<=5 then 1
else 0
end)
from tablename a

热心网友 时间:2022-05-03 19:37

declare @a datetime
declare @b datetime
declare @c int
set @a = '2012-07-01'
set @b = GETDATE()
if(DATEPART(WEEKDAY, @a)=1 or DATEPART(WEEKDAY, @a)=7)
set @c = DATEDIFF(DAY, @a, @b)/7 * 5
else
set @c = (DATEDIFF(DAY, @a, @b)/7 * 5) + DATEDIFF(DAY, @a, @b) % 7 - 2

select @c
这样就OK

热心网友 时间:2022-05-03 21:12

declare @a datetime
declare @b datetime
declare @c int
set @a = '2012-07-01'
set @b = GETDATE()
if(DATEPART(WEEKDAY, @a)=1 or DATEPART(WEEKDAY, @a)=7)
set @c = DATEDIFF(DAY, @a, @b)/7 * 5
else
set @c = (DATEDIFF(DAY, @a, @b)/7 * 5) + DATEDIFF(DAY, @a, @b) % 7 - 2
用SQL语言计算两个日期间有多少个工作日

第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天 末一个星期的工作日数:DATEPART(dw, @enddt),最多5天 计算方法:如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”否则按下面的公式计算 (两个日期间的总天数 - 第一个星期的天数 - 末一个...

sql语句如何查询指定日期共几天

end_date Datetime, --要查询的结束日期 bz bit --@bz=0 查询工作日,@bz=1 查询休息日,@bz IS NULL 查询全部日期 )RETURNS @re TABLE(id int identity(1,1),Date datetime,Weekday nvarchar(3))AS BEGIN DECLARE @tb TABLE(ID int IDENTITY(0,1),a bit)INSERT INTO @tb(a) SE...

在sql中怎样计算两个时间之间的天数?求高人指点

DateDiff(d,Date,GetDate())其中 d 为 "天" (计算天的差数 若为"h"则是小时,以次类推)Date 为在数据库里查询出来的时间 GetDate()为获取的当前时间(可以换成任何获取时间),

用sql语句怎么求 一个表T中 字段A,和字段B数据都相同的 数据。_百度知 ...

where t1.a=t2.a and t1.b=t2.b;

sql中如何计算得到一段时间内指定日期中有多少个休息日和节假日

SQL中提供了一些日期计算函数如dateadd,可对日期进行递增操作。基本代码如下:declare @startdate datetime='2015-9-10'declare @enddate datetime='2015-10-10'declare @days int=0 set @startdate=dateadd(day,@startdate,1) --给开始日期加1天 while(@startdate&lt;@enddate) --如果小于结束日期,...

SQL 统计每日上班打卡和下班打卡语句

select A1.card_no,A1.atte_time as "上班时间",A2.atte_time as "上班时间1",A3.atte_time as "上班时间2",A4.atte_time as "上班时间3",B1.atte_time as "下班时间",B2.atte_time as "下班时间1",B3.atte_time as "下班时间2",B4.atte_time as "下班时间3"from (select ...

如何在sql中统计一天内一个用户既有a操作又有b操作的数量

b在同一列,无法直接进行比较判断,需要创造新的一列,表示用户的下一步操作类型。2、其次使用开窗函数中的前后函数,返回用户的下一步操作类型,判断用户下一步操作的类型。3、然后将上一步操作的结果作为子查询表,筛选在a操作之后进行b操作的用户。4、最后对第二步结果按天分组,统计计数。

SQl语句写某一段时间范围内的数量

when to_char(p.tm,'dd') &lt; 11 then '上旬' when to_char(tm,'dd') &lt; 21 then '中旬' else '下旬' end as day from ST_PPTN_R p,ST_STBPRP_B b where p.STCD=b.STCD AND b.STTP like'%PP%')group by stcd, stnm, month, day;

sql时间统计问题,跨日数据统计

您好,以下是mysql语法:SELECTCOUNT(1)FROMdb_tableWHEREDATEDIFF(update_time, create_time) &gt; 0;

SQLServer的分时间段统计的SQL语句。

没看懂a和b二个表的用途,假设对表a统计。直接统计比较困难,不过你可以先把日期转换成到最早日期的分钟数,把分钟数除以10求整,得到的新值就是每10分钟一组的了。不过新值需要保存到临时表,再对临时表分组统计。--按上述分析将a表中的f_time转换为以最早日期为起点的每10分钟一个值的新列,如...

用matlab语句输入矩阵a和b 语句a除以语句b写法 如何统计a列大于b列 统计a列每个b列内容不同的个数 如果a列相同统计b列 以下程序段中与语句k=a&gt;b 执行下列语句后a的值为b的值为 用sql语句查类型a或者b excel怎么根据a统计b
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么鉴别匡威真假鉴别鉴别匡威真假的方法与技巧 洛阳小碗汤怎么做 酥肉丸子汤如何烹饪简单而又不失美味? 直通车产出比多少不亏?产出比低怎么调整? 淘宝直通车投产比多少才是盈利?怎么提升? 车打不着拧钥匙没反应 车打火的钥匙拧不动 微信关闭时后台还在图标上还有个小锁什么意思 坦克世界闪击战电脑需求配置玩坦克世界电脑配置要达到什么标准_百度... 坦克世界对电脑配置要求高不高玩坦克世界电脑需要什么配置要求 坦克世界对电脑的配置要求是多少坦克世界配置要求 sqlserver 2008远程连接失败,也搜索了不少内容 连接不上远程服务器 sql server 2005 远程连接问题,请高手看看! SQL Server 行远程连接失败 SQLServer远程连接失败怎么办 sql server 如何设置禁止对某一个表增,删,修改。听说触发器可以,具体代码是什么? 如何设置sql server 2000,使其在客户端修改或新建表,在服务器端数据不变 SQL Server 2000如何禁止用户查看其他数据库列表和可登录用户的列表 在sql sever 中怎么用语句给予用户建表的权限 win 7 安装 sql server 2000 后不能在企业管理器中创建表 SQL Server怎么设置表的权限. 对mssql里的数据库进行加密, 别人能附加但不能查看数据库的表,存储过程等内容 sqlserver 加密特定字段,用windows集成身份才能看到明文,也就是要数据库本机才能看到。 SQLSERVER将表中一列明文密码导入到另外一列并MD5加密 SQLServer数据库 不制作证书是否能加密SQLSERVER与客户端之间传输的数据 如何开启sqlserver ted 加密 MsSQLServer是如何加密口令的 vb连接数据库sqlserver的问题 SqlServer2008R2 插入数据超时 java 计算 2个日期间隔多少个工作日 SQL怎么实现:一个日期加上多少个工作日后是多少号? SQL中怎么能得到两个日期之间的所有日期值 求一段sql server 存储过程的代码 用以实现JSP中分页 哪位高手愿根据我的SQL分页存储过程写一个完整的asp分页显示代码? 关于asp结合sql server 分页存储过程代码 sql临时表的创建读取删除问题 客户端可不可以同时对SQL中的一个临时表进行建立或删除 SQL临时表的创建 临时表inserted表和deleted表有什么作用 sqlserver多表查询的一个问题 sqlserver怎么使用日志恢复 如何使用事务日志恢复SQLServer数据库 怎么设置sql2008允许远程访问 如何配置 SQL Server 2005,以允许远程连接 如何配置 SQL Server 2008 以允许远程连接 sql server 2008怎么配置允许远程连接 sql server2008远程连接配置 如何设置sql server 2008 允许远程连接 如何使用BULK INSERT将CSV或TXT文件导入到SQL Server中