2009-07-13 229 views

回答

81

隨着TO_CHAR:

select to_char(sysdate, 'YYYY') from dual; 

在您的例子,你可以使用類似:

BETWEEN trunc(sysdate, 'YEAR') 
    AND add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60; 

的比較值,你要求什麼:

select trunc(sysdate, 'YEAR') begin_year 
    , add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60 last_second_year 
from dual; 

BEGIN_YEAR LAST_SECOND_YEAR 
----------- ---------------- 
01/01/2009 31/12/2009 
+0

謝謝,通過你的回答,我能夠創建我需要的幾個不同的查詢的SQL! – 2009-07-16 13:04:19

+3

爲了獲得今年的最後一秒,從第二年開始減少一秒鐘將適用於日期和可預測的時間戳,而不需要小數秒。如果最終得到時間戳和小數秒,那麼某些值可能會在當年之內,並且在今年開始之間和明年年底之間> 1秒之間錯過。跨不同精度的多個日期/時間類型工作,我推薦並更喜歡'start_of_this_year <= value_under_test和value_under_test <'start_of_next_year' – 2013-04-10 13:46:55

52

另一種選擇是:

SELECT * 
    FROM TABLE 
WHERE EXTRACT(YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
+2

這與基於函數的索引相結合可以使查詢速度更快。 – 2009-07-13 14:50:17

+1

基於函數的索引會在這裏增加不必要的複雜性。爲什麼在使用簡單索引時可以使用FBI? – jva 2009-07-13 15:06:23

+1

如果將一個函數(如EXTRACT)應用於該列(在Oracle 11g上進行測試),那麼date_field上的簡單索引將不會被使用 - 如果它確實會很好。然而,可以使用EXTRACT上的基於功能的索引(YEAR FROM date_field)。 – 2009-07-14 08:59:16

13

使用extract(datetime)功能,它很容易,操作簡單。

它返回年,月,日,分,秒

例子:

select extract(year from sysdate) from dual; 
-5

要顯示在Oracle的SQL

select sysdate from dual; 
0

當前系統日期還有一種選擇是:

SELECT * FROM mytable 
WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR'); 
1

因爲我們這樣做是一個到死 - 你不必指定年份:

select * from demo 
where somedate between to_date('01/01 00:00:00', 'DD/MM HH24:MI:SS') 
       and  to_date('31/12 23:59:59', 'DD/MM HH24:MI:SS'); 

但是,如果要指定落在內的所有日期值由FerranB接受的答案更有意義本年度。

相關問題