現在の年をSQLステートメントの変数として追加する必要がありますが、SQLを使用して現在の年を取得するにはどうすればよいですか?
つまり.
BETWEEN TO_DATE('01/01 /**現在の年** 00:00:00 '、' DD/MM/YYYY HH24:MI:SS ') AND TO_DATE('31/12 /**現在の年** 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)
extract(datetime)
関数を使用してください。とても簡単で簡単です。
年、月、日、分、秒を返します
例:
select extract(year from sysdate) from dual;
これは死ぬまでやっているので、年を指定する必要はありません:
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が受け入れた回答の方が意味があります。
さらに別のオプションは次のとおりです。
SELECT * FROM mytable
WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');