如何在Oracle上使用SQL获取当前年份?

Cra*_*gus 58 sql oracle date

我需要将当前年份添加为SQL语句中的变量,如何使用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')

Fer*_*anB 100

使用to_char:

select to_char(sysdate, 'YYYY') from dual;
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您可以使用以下内容:

BETWEEN trunc(sysdate, 'YEAR') 
    AND add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60;
Run Code Online (Sandbox Code Playgroud)

比较值正是您所要求的:

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
Run Code Online (Sandbox Code Playgroud)

  • 从明年开始减去一秒钟以获得今年的最后一秒将适用于日期和可能的时间戳,没有小数秒.如果你最终得到时间戳和小数秒,那么一些值可能在当前年份内,并且在"今年开始"和"明年年底" - "1秒"之间错过.在不同的RDBMS上工作,每个RDBMS都有多个具有不同精度的日期/时间类型我建议并且更喜欢`start_of_this_year <= value_under_test和value_under_test <'start_of_next_year` (3认同)

bor*_*jab 60

另一种选择是:

SELECT *
  FROM TABLE
 WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
Run Code Online (Sandbox Code Playgroud)

  • 这与基于函数的索引相结合将使查询非常快. (3认同)
  • 在这种情况下使用FBI的另一个优点是直方图可以为优化器提供关于表中年份分布的更准确的统计数据. (3认同)
  • 如果将一个函数(如EXTRACT)应用于列(在Oracle 11g上测试),则不会使用date_field上的简单索引 - 如果它确实会很好.但是,可以使用基于函数的EXTRACT索引(YEAR FROM date_field). (2认同)

小智 15

使用extract(datetime)功能它简单易行.

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

例:

select extract(year from sysdate) from dual;
Run Code Online (Sandbox Code Playgroud)