SQL 当天日期加上指定天数,得出的日期,中间不算周六周日

SQL 当天日期加上指定天数,得出的日期,中间不算周六周日,第1张

declare @days int --你要加的天数
declare @i int --循环条件
declare @k int --判断星期几条件
declare @start datetime --开始日期
-- 赋值
set @days = 6
set @i = 1
set @start = '2015-10-29'
while @i <= @days
begin
set @start = @start + 1
select @k = datepart(weekday, @start)
if (@k = 6)
begin
set @start = @start + 2
end
else if (@k = 7)
begin
set @start = @start + 1
end
set @i = @i + 1
end
select @start

解决方案:

使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后使用DAYS 函数从一个HIREDATE中减去另一个HIREDATE:

select days(ward_hd) - days(allen_hd)

from (

select hiredate as ward_hd

from emp

where ename = 'WARD'

) x,

select hiredate as allen_hd

from emp

where ename = 'ALLEN'

) y

Oracle和PostgreSQL

使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后从一个日期中减去另一个日期:

select ward_hd - allen_hd

from (

select hiredate as ward_hd

from emp

where ename = 'WARD'

) x,

(

select hiredate as allen_hd

from emp

where ename = 'ALLEN'

) y

这个问题的前题是需要建立一个表(存放休息日和节假日) holidays,里面存放了所有休息日等
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<@enddate) --如果小于结束日期,一直循环处理下面
begin
IF EXISTS (SELECT FROM holidays WHERE holiday=@startdate) --如果假日表中找到对应日期,则假日数加1
set @days=@days+1

set @startdate=dateadd(day,@startdate,1) --给开始日期加1天
end
select @days --总天数。

没看懂你的意思,求两个日期时间差:

mysql:可以使用

select datediff('2017-6-25','2016-6-28') from dual;

oracle:可以使用

select date1 - date2 from dual

求得其中的天数差值。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13392723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存