Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何查找两个日期之间的所有周五和节假日_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql 如何查找两个日期之间的所有周五和节假日

Sql 如何查找两个日期之间的所有周五和节假日,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,下表: hDate Holiday 17/12/2011 National Day 01/01/2012 New Year .... 从表中,我想找出两个日期之间的假期总数: 类似以下的查询: select count(hdate) from table1 where hdate between '" & start_date & "' and '" & end_date & "' 用户输入: start_date = '16/12/2011'

下表:

hDate      Holiday

17/12/2011 National Day
01/01/2012 New Year
....
从表中,我想找出两个日期之间的假期总数:

类似以下的查询:

select count(hdate)
from table1
where hdate between '" & start_date & "' and '" & end_date & "'
用户输入:

start_date = '16/12/2011' 
end_date = '15/01/2012' 
我还想找出两个日期之间的星期五

对于查找星期五,如何创建查询

预期产出:

Holiday Friday

2       5
[2] -表1起2天假期,[5]-5天星期五

如何做到这一点

对于假期,您的SQL看起来很好,只是在将参数插入SQL时遇到了问题。如果您指定使用哪种编程语言,我们可能会在这里提供帮助。如果使用.NET,则应使用参数化查询而不是字符串替换

有关星期五,请参见以下问题:

见:

一张日历桌可以使它更有趣 更容易围绕任何问题开发解决方案 涉及日期的商业模式。 上次我检查时,这包括 几乎任何商业模式都可以 在某种程度上想想。常数 最终需要解决的问题 冗长、复杂、低效 方法包括: 问题:

x和y之间有多少个工作日? 3月的第二个星期二和4月的第一个星期五之间的所有日期是什么 我希望这批货什么时候到达 这个季度所有的星期五是几号 ...  
这将计算两个日期之间的星期五:

declare @from datetime= '2012-01-26'  
declare @to datetime  = '2012-01-28'

select datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 
假期很容易找到,似乎你已经涵盖了这一部分

我早些时候回答过这个问题。但没有得到任何信用:


我们用一个额外的时间表来解决这个问题。这看起来像这样

ID   | Date        | Holiday   | Year    | CalendarWeek | DayName
1    | 17/12/2011  | 1         | 2011    | 50           | Monday 
2    | 18/12/2011  | 0         | 2011    | 50           | Thursday
3    | 19/12/2011  | 0         | 2011    | 50           | Wendsday
select 
(select count(d.DayName) from date_table as d 
     where d.DayName = 'Friday' and date >= start_date and date <= end_date ),
(select sum(d.Holiday) from date_table as d 
     where date >= start_date and date <= end_date )
有了这个表格,你可以像这样解决你的问题

ID   | Date        | Holiday   | Year    | CalendarWeek | DayName
1    | 17/12/2011  | 1         | 2011    | 50           | Monday 
2    | 18/12/2011  | 0         | 2011    | 50           | Thursday
3    | 19/12/2011  | 0         | 2011    | 50           | Wendsday
select 
(select count(d.DayName) from date_table as d 
     where d.DayName = 'Friday' and date >= start_date and date <= end_date ),
(select sum(d.Holiday) from date_table as d 
     where date >= start_date and date <= end_date )
这也应该与SQL Server 2000兼容。对于SQL Server 2005及更高版本:

with tmp(id) as
(
 select id from  from date_table where date >= start_date and date <= end_date
)
select
 (select count(d.DayName) from date_table inner join tmp on tmp.id = id 
     where DayName = 'Friday' ),
 (select sum(d.Holiday) from date_table inner join tmp on tmp.id = id )
选择该选项可帮助您:

DECLARE @FROMDATE DATE = '2009-01-07'
DECLARE @TODATE DATE = '2012-01-26'

SELECT COUNT(*) holidays,(select COUNT(*) from table1 where DATEPART(DW, hdate) = 5
AND DT BETWEEN @FROMDATE AND @TODATE ) fridays FROM table1 
WHERE hdate BETWEEN @FROMDATE AND @TODATE

在这件事上没有投票?其他解决方案是忽略区域设置。不管怎样,一切都很好!