2011-02-18 153 views

回答

7
SELECT TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum AS d 
FROM all_objects 
WHERE TO_DATE('12/01/2003', 'MM/DD/YYYY') - 1 + rownum <= TO_DATE('12/05/2003', 'MM/DD/YYYY') 

http://forums.devshed.com/oracle-development-96/select-all-dates-between-two-dates-92997.html 「之間」

+0

-1本代碼示例(來自鏈接頁面)回答了一個稍有不同的問題,並且比這裏提出的問題需要更復雜。 – payne 2011-02-18 12:28:45

+0

@payne,格雷格已經給出了迄今爲止最好的答案。所有其他人*認爲*有涉及的表格。當然,這可能是OP *想要的*(而不是* *)所要求的,但是如果有人懶得說出他想要的東西,他應該得到他要求的東西。因此,+1 – 2011-02-18 12:32:21

+0

我猜想這個稍微模糊的要求,並不清楚OP是否想從表中選擇 - 我想我們會發現是否以及何時接受答案。 – 2011-02-18 14:34:34

-1
select * from yourtable where somedate between sysdate and sysdate - 42 
7
SELECT * FROM your_table WHERE your_date_field BETWEEN DATE '2010-01-01' AND DATE '2011-01-01'; 
1

使用。在一般意義上說:

select * from someTable where dateCol between date1 and date2; 

請注意,dateCol定義爲日期和日期1,date2也是日期值。如果這些不是日期,那麼您將使用to_date函數將它們轉換爲日期。

2

可以使用LEVEL虛列在一個棘手的方式來產生一個系列,因此,舉例來說,從現在開始我可以今天和20天之間的名單:你

select trunc(sysdate+lvl) from 
    (select level lvl from dual connect by level < ((sysdate+20)-sysdate - 1)) 
order by 1 

一般地能看看這將如何適用於任何兩個給定的日期。

select trunc(early_date+lvl) from 
    (select level lvl from dual connect by level < (later_Date-early_date-1)) 
order by 1 

如果您還想包括兩個結束日期,您可以調整子句。

0

這將是PL SQL official文檔中提到的最佳方法。

我們必須使用PL SQL內置函數TO_DATE(日期,日期格式)才能獲得解決方案。

SELECT * FROM order_details 
WHERE order_date 
BETWEEN 
TO_DATE ('2014/02/01', 'yyyy/mm/dd') 
AND 
TO_DATE ('2014/02/28', 'yyyy/mm/dd'); 

它是使用比較運算符等效於以下語句

SELECT * FROM order_details 
WHERE order_date >= TO_DATE('2014/02/01', 'yyyy/mm/dd') 
AND order_date <= TO_DATE('2014/02/28','yyyy/mm/dd'); 
-1

與all_days如(選擇TRUNC(TO_DATE('12 -03-2017' , 'DD-MM-YYYY' )+ 1)+1從 (從級聯雙級連接選擇級別級別,級別爲<('12 -03-2017','DD-MM-YYYY')+ 1)) order by 1) (rtrim(to_char(all_dates,'DAY')))不在('SATURDAY','SUNDAY');中的所有日期中選擇count(*)作爲no_of_days。

相關問題