2011-03-18 47 views
0

如何在两天(周一和周五)之后显示工作日使用SQL QUERY?如何显示两天以内(周一和周五)的平日?

Date_From= 01/03/2011 
Date_To =15/03/2011 

我需要一个像下面

Date_From Date_To  
01/03/2011 01/03/2011 
04/03/2011 04/03/2011 'Friday 
05/03/2011 06/03/2011 
07/03/2011 07/03/2011 'Monday 
08/03/2011 10/03/2011 
11/03/2011 11/03/2011 'Friday 
12/03/2011 13/03/2011 
14/03/2011 14/03/2011 'Monday 
15/03/2011 15/03/2011 

希望你的帮助

+0

@ User475464这是问题,甚至涉及到从数据库中查询数据?或者也许在db中的函数? – 2011-03-18 20:38:31

回答

0
select 
     t1.Date_From, 
     t1.Date_To, 
     case when DATENAME(dw,t1.Date_to) IN ('friday','monday') THEN DATENAME(dw,t1.Date_to) else NULL END  
from table t1 
0

这是使用Oracle输出。如果我使用Oracle分析函数,我可以得到第15个显示,但是我不知道使用可移植的方式来获得一行结果以取决于其他行的存在。此外,由于笛卡尔积,不要将其用于少数几行。

select to_char(d1.d, 'DD/MM/YYYY') 
, to_char(d2.d, 'DD/MM/YYYY') 
, decode(d1.n, 'MONDAY', '''Monday', 'FRIDAY', '''Friday') 
from (select to_date('2011-02-28') + rownum as d 
    , to_char(to_date('2011-02-28') + rownum, 'FMDAY') as n 
    from user_objects where rownum <= 15) d1 
, (select to_date('2011-02-28') + rownum as d 
    , to_char(to_date('2011-02-28') + rownum, 'FMDAY') as n 
    from user_objects where rownum <= 15) d2 
where d1.d <= d2.d 
and d2.d - d1.d < 7 
and ((d1.d = d2.d and d1.n in ('MONDAY', 'FRIDAY')) 
    or (d1.n = 'TUESDAY' and d2.n = 'THURSDAY') 
    or (d1.n = 'SATURDAY' and d2.n = 'SUNDAY')) 
order by d1.d, d2.d; 
0

这是SQL Server 2005+。

DECLARE @Date_From datetime, @Date_To datetime; 
SET @Date_From = '20110301'; 
SET @Date_To = '20110315'; 

WITH datelist AS (
    SELECT 
    Date = @Date_From, 
    GroupID = 1 
    UNION ALL 
    SELECT 
    Date = DATEADD(day, 1, Date), 
    GroupID = CASE 
     WHEN DATENAME(dw, Date) IN ('Sunday', 'Monday', 'Thursday', 'Friday') 
     THEN 1 
     ELSE 0 
    END + GroupID 
    FROM datelist 
    WHERE Date < @Date_To 
) 
SELECT 
    Date_From = MIN(Date), 
    Date_To = MAX(Date) 
FROM datelist 
GROUP BY GroupID 

输出:

Date_From    Date_To 
----------------------- ----------------------- 
2011-03-01 00:00:00.000 2011-03-03 00:00:00.000 
2011-03-04 00:00:00.000 2011-03-04 00:00:00.000 
2011-03-05 00:00:00.000 2011-03-06 00:00:00.000 
2011-03-07 00:00:00.000 2011-03-07 00:00:00.000 
2011-03-08 00:00:00.000 2011-03-10 00:00:00.000 
2011-03-11 00:00:00.000 2011-03-11 00:00:00.000 
2011-03-12 00:00:00.000 2011-03-13 00:00:00.000 
2011-03-14 00:00:00.000 2011-03-14 00:00:00.000 
2011-03-15 00:00:00.000 2011-03-15 00:00:00.000 
+0

你可以给我只** **周一和周四** – user475464 2011-03-18 21:28:39

+0

@ user475464查询:不知道我明白你的意思。但无论如何,如果这是对原始问题的澄清或更改,请随时编辑您的问题,然后添加这些详细信息。如果你正在努力用英语仔细解释你的请求,你可以通过提供一些很好的输入数据和输出数据的例子来帮助你。 – 2011-03-18 21:46:34

相关问题