当前位置:首页 » 编程语言 » sql工作日

sql工作日

发布时间: 2022-09-08 02:33:18

A. sql语句计算两个日期之间有多少个工作日

/*
因为工作中一个奇怪的需求,要用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

B. sql 查询几个工作日之后的日期

select datediff('2009-1-1', '2008-1-1');

用datediff函数,第一个参数是截止时间,第二个参数是起始时间

不好意思,刚才的是mysql,刚看了下sql的文档发现有点区别- -,sql的话,用下面的形式:
DATEDIFF ( datepart , startdate , enddate )

所以你要求2个日期之间间隔的天数,这样写:

datediff( dd, '2008/1/1', '2009/1/2' )

这里的dd表示计算天数差

C. 每个月的工作日有多少天,每个月剩余多少天(去除工作日,法定节假日)的sql语句。

select year(日期),month(日期),is_working_day,count(*) from table group by is_working_day order by year(日期),month(日期);

mysql的写法,如果sqlserver,
year(日期),month(日期) 换成
DateName(year,日期),DateName(month,日期)

D. weekday(date) 后 怎么求 工作日的总天数和休息日的总天数(sql)

DECLARE @date DATE='' DECLARE @date_month_end_day DATE =''SET @date='2016-09-04'SET @date_month_end_day=DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DAY(@date),@date)))--指定日期所在月份剩余天数和剩余周末天数DECLARE @i INT = DAY(DATEADD(DAY,1,DAY(@date)))DECLARE @j INT =0WHILE @i <= DAY(@date_month_end_day)BEGIN IF DATEPART(WEEKDAY,CAST(CAST(YEAR(@date) AS VARCHAR(4))+'-'+CAST(MONTH(@date) AS VARCHAR(2))+'-'+CAST(@i AS VARCHAR(2)) AS DATE)) NOT BETWEEN 2 AND 6 SET @j=@j+1 SET @i=@i+1ENDSELECT @date AS 输入的日期,DATEDIFF(DAY,@date,@date_month_end_day) AS 剩余天数,@j AS 剩余周末天数

E. db2sql判断日期是否为工作日

db2sql判断日期是否为工作日:
如果格式固定的话,可以尝试TO_DATE再捕获异常的方式进行处理。

CREATEFUNCTIONISDATE(p_datevarchar(10))
RETURNSINT
LANGUAGESQL
BEGIN
--错误标志
DECLAREv_resultINT;
DECLAREv_dateDATE;
--定义错误处理
--如果发生错误,继续处理
--但是把标志位设置为0
DECLARECONTINUEHANDLER
FOR
SQLEXCEPTIONSETv_result=0;
--错误标志,首先设置为正常.
SETv_result=1;
SETv_date=TO_DATE(p_date,'YYYY-MM-DD');
returnv_result;
END
db2=>select
db2(cont.)=>isdate(񟭌-10-10')A,
db2(cont.)=>isdate(񟭌-13-13')B
db2(cont.)=>FROM
db2(cont.)=>SYSIBM.SYSDUMMY1@
AB

F. sql里我有一张全年工作日表,如9-1,9-2,9-4....,我建立了一个视图输入日期就可以查询当天排班

用代理作业,就是计划任务,sqlserver自带的,写好更新插入语句就会定时自动执行的。数据得进行判断,没有在新表的数据才进行插入,已经在的数据可以做更新处理,或者不处理。

G. SQL怎么实现所有日期对应的上一工作日和下一工作日

select dateadd( day, -1, getdate() ) 上一工作日,
getdate() 当前工作日,
dateadd(day,1,getdate() ) 下一工作日

H. 如何使用sql语句计算工作日(除去周六周日以及法定节假日)

最多只能除去周六周日,法定假日是自己国家规定的,需要单独处理的亲。

I. 判断是工作日还是周末的SQL语句

方法一:
 SELECT d.theDate,
        DATEDIFF(DAY, '17530101', d.theDate) % 7 / 5 AS IsWeekend,
        1 - DATEDIFF(DAY, '17530101', d.theDate) % 7 / 5 AS IsWeekday
FROM    (
                SELECT CAST('20081124' AS SMALLDATETIME) AS theDate UNION ALL
                SELECT '20081125' UNION ALL
                SELECT '20081126' UNION ALL
                SELECT '20081127' UNION ALL
                SELECT '20081128' UNION ALL
                SELECT '20081129' UNION ALL
                SELECT '20081130'
        ) AS d
方法二:
SELECT d.theDate,
CASE WHEN DATEPART(weekday,thedate+@@DATEFIRST -1)<6 THEN 1 ELSE 0 END,
CASE WHEN DATEPART(weekday,thedate+@@DATEFIRST -1)>=6 THEN 1 ELSE 0 END

FROM (
SELECT CAST('20081124' AS SMALLDATETIME) AS theDate UNION ALL
SELECT '20081125' UNION ALL
SELECT '20081126' UNION ALL
SELECT '20081127' UNION ALL
SELECT '20081128' UNION ALL
SELECT '20081129' UNION ALL
SELECT '20081130'
) AS d

J. sql怎样获取工作日

SELECT datename(weekday, getdate())
返回结果是 星期三

热点内容
索尼安卓11如何退回安卓10 发布:2025-01-13 10:24:09 浏览:127
程序编译结构 发布:2025-01-13 10:24:08 浏览:90
创建邮箱地址服务器连接错误 发布:2025-01-13 09:49:24 浏览:723
linux编辑文档 发布:2025-01-13 09:47:51 浏览:435
二手制冷压缩机 发布:2025-01-13 09:43:59 浏览:585
网鱼电脑密码多少 发布:2025-01-13 09:33:46 浏览:464
如何取消子账号密码 发布:2025-01-13 09:22:41 浏览:347
抖音搜索有缓存 发布:2025-01-13 09:17:28 浏览:590
c语言字符数组连接 发布:2025-01-13 08:55:11 浏览:901
国二c语言编程题目 发布:2025-01-13 08:45:41 浏览:285