我需要将当前年份作为变量添加到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