【发布时间】:2010-11-10 07:42:09
【问题描述】:
我需要在 SQL 语句中添加当前年份作为变量,如何使用 SQL 检索当前年份?
即
之间 TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') 和 TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS')【问题讨论】:
我需要在 SQL 语句中添加当前年份作为变量,如何使用 SQL 检索当前年份?
即
之间 TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') 和 TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS')【问题讨论】:
为什么不使用 YEAR 函数?
SELECT * FROM table WHERE YEAR(date_field)=YEAR(SYSDATE);
【讨论】:
使用 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
【讨论】:
between <begin this year> and <end next year> - 1 second 遗漏。在不同的 RDBMS 中工作,每个 RDBMS 都有多种日期/时间类型,我推荐并更喜欢 start_of_this_year <= value_under_test and value_under_test < 'start_of_next_year
既然我们这样做到死 - 您不必指定年份:
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');
【讨论】:
在 oracle-sql 中显示当前系统日期
select sysdate from dual;
【讨论】:
使用extract(datetime) 函数非常简单。
返回年、月、日、分、秒
例子:
select extract(year from sysdate) from dual;
【讨论】:
extract 函数只会从datetime 类型字段(如sysdate)中提取年、月和日。不过,它会从timestamp 字段中提取其他字段。
另一种选择是:
SELECT *
FROM TABLE
WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate)
【讨论】: