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求得其中的天数差值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)