表离开有以下数据: -
EMPNO NAME DATEFROM DATETO
111 xxx 2014-08-03 00:00:00.000 2014-09-05 00:00:00.000
现在我从休假表中获取数据:
SELECT [NAME],
sum(datediff(day, DATEFROM, case
when dateto > '2014-08-31' then '2014-08-31'
else dateto
end)+1) as holiday
FROM [leave]
where DATEFROM >= '2014-08-01'
and DATEFROM <= '2014-08-31'
and userid = 1
group by name
它给出了我完美的答案: -
NAME holiday
xxx 29
但我希望从假日开始排除周末(周五和周六)...但必须从2014-08-03日期开始排除(它在离开表和日期列中)
我该怎么做呢?
答案 0 :(得分:2)
您可以使用以下查询来计算两天之间的假期:
SELECT (DATEDIFF(WEEK,StartDate,EndDate)-1) * 2 +
CASE DATEPART(dw,StartDate)
WHEN 4 THEN 2
WHEN 5 THEN 1
ELSE 0
END
答案 1 :(得分:0)
你也可以使用
DATEPART(dw, DATEFROM) BETWEEN 1 and 5
星期四这会给你星期天。
sun = 1,mon = 2,tue = 3,wed = 4,thu = 5,fri = 6,sat = 7
但是,我认为当天的数字关系可能与您的系统设置有关
答案 2 :(得分:0)
尝试使用此DATENAME()
功能:
select [your_date_column]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Friday'
and DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
希望这可能会对你有帮助!
答案 3 :(得分:0)
在查询中添加以下where子句会有所帮助:
DATEPART(dw,datefrom) not in(5,6)
此查询将从结果中排除所有星期五和星期六。检查DateFirst值here以获取更多信息。
答案 4 :(得分:0)
检查
SELECT [NAME],
sum(datediff(day, DATEFROM, case
when dateto > '2014-08-31' then '2014-08-31'
else dateto
end)+1) as holiday
FROM [leave]
where DATEFROM >= '2014-08-01'
and DATEFROM <= '2014-08-31'
and userid = 1 and datepart(dw,DATEFROM)<>6 and datepart(dw,DATEFROM)<>7
group by name