我需要將當前年份作爲變量添加到SQL語句中,如何使用SQL檢索當前年份?如何在Oracle上使用SQL來獲取當前年份?
即
BETWEEN TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') AND TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS')
我需要將當前年份作爲變量添加到SQL語句中,如何使用SQL檢索當前年份?如何在Oracle上使用SQL來獲取當前年份?
即
BETWEEN TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') AND TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS')
隨着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
另一種選擇是:
SELECT *
FROM TABLE
WHERE EXTRACT(YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate)
這與基於函數的索引相結合可以使查詢速度更快。 – 2009-07-13 14:50:17
基於函數的索引會在這裏增加不必要的複雜性。爲什麼在使用簡單索引時可以使用FBI? – jva 2009-07-13 15:06:23
如果將一個函數(如EXTRACT)應用於該列(在Oracle 11g上進行測試),那麼date_field上的簡單索引將不會被使用 - 如果它確實會很好。然而,可以使用EXTRACT上的基於功能的索引(YEAR FROM date_field)。 – 2009-07-14 08:59:16
使用extract(datetime)
功能,它很容易,操作簡單。
它返回年,月,日,分,秒
例子:
select extract(year from sysdate) from dual;
要顯示在Oracle的SQL
select sysdate from dual;
當前系統日期還有一種選擇是:
SELECT * FROM mytable
WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');
從雙重選擇TO_CHAR(SYSDATE,'YYYY');
因爲我們這樣做是一個到死 - 你不必指定年份:
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接受的答案更有意義本年度。
謝謝,通過你的回答,我能夠創建我需要的幾個不同的查詢的SQL! – 2009-07-16 13:04:19
爲了獲得今年的最後一秒,從第二年開始減少一秒鐘將適用於日期和可預測的時間戳,而不需要小數秒。如果最終得到時間戳和小數秒,那麼某些值可能會在當年之內,並且在今年開始之間和明年年底之間> 1秒之間錯過。跨不同精度的多個日期/時間類型工作,我推薦並更喜歡'start_of_this_year <= value_under_test和value_under_test <'start_of_next_year' – 2013-04-10 13:46:55