2011-03-18 76 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

相關問題