Как получить текущий год, используя SQL на Oracle? - PullRequest
57 голосов
/ 13 июля 2009

Мне нужно добавить текущий год в качестве переменной в инструкции SQL, как я могу получить текущий год с помощью SQL?

т.е.

  BETWEEN 
    TO_DATE('01/01/<i>**currentYear**</i> 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
    AND
    TO_DATE('31/12/<i>**currentYear**</i> 23:59:59', 'DD/MM/YYYY HH24:MI:SS')

Ответы [ 6 ]

99 голосов
/ 13 июля 2009

Использование 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
60 голосов
/ 13 июля 2009

Другой вариант:

SELECT *
  FROM TABLE
 WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
15 голосов
/ 30 июня 2011

Используйте функцию extract(datetime), это так легко, просто.

Возвращает год, месяц, день, минуту, секунду

Пример:

select extract(year from sysdate) from dual;
1 голос
/ 27 февраля 2018

Поскольку мы делаем это до смерти - вам не нужно указывать год:

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 ответ имеет больше смысла, если вы хотите указать все значения дат, приходящиеся на текущий год.

1 голос
/ 09 февраля 2017

Еще один вариант будет:

SELECT * FROM mytable
 WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');
0 голосов
/ 11 марта 2014

Для отображения текущей системной даты в oracle-sql

   select sysdate from dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...